home *** CD-ROM | disk | FTP | other *** search
- Path: abcfd20.larc.nasa.gov!amiga-request
- From: amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v90i284: odin.library 2.7 - linda-like interprocess communications library, Part01/02
- Reply-To: "Peter \rb{k" <poe@daimi.aau.dk>
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v90i284@abcfd20.larc.nasa.gov>
- Date: 14 Oct 90 19:18:13 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga
-
- Submitted-by: "Peter \rb{k" <poe@daimi.aau.dk>
- Posting-number: Volume 90, Issue 284
- Archive-name: libraries/odinlib-2.7/part01
-
- [ uuencoded library enclosed. one source module and two text files
- had to be uuencoded because of 8-bit characters and escape seqs ...tad ]
-
- This is release two of odin.library, containing Linda-like IPC-
- features for the Amiga.
-
- A few bugs in release one has been eliminated.
-
- Several features have been added, eg. It's now possible to wait for an
- envelope with a timeout, so you wont be blocked forever. Also you can
- now request that envelopes be posted to a specified messageport, so
- your task can be signalled when the envelope arrives.
-
- The documentation has been polished up too! And the examples are better
- and more extensive.
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 2)."
- # Contents: Makefile draw.c.uu odin.h odin.i odin.uu odin_lib.fd
- # odindemo1.c odinglue.asm odintest.c philosophers.c readme.uu
- # tasks.c
- # Wrapped by tadguy@abcfd20 on Sun Oct 14 15:18:10 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(747 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- X#
- X# Aztec-makefile
- X#
- X
- XCCFLAGS =
- XLINKOBJS = odinglue.o
- XLIBS = -lc
- XTMPDIR = RAM:
- X
- X.c.o:
- X copy $*.c $(TMPDIR)
- X cc $(CCFLAGS) -o $(TMPDIR)$@ $(TMPDIR)$*.c
- X
- Xall: odindemo1 odintest philosophers tasks draw
- X
- Xodindemo1: odindemo1.o odinglue.o
- X ln -o $(TMPDIR)$@ $(TMPDIR)$@.o $(LINKOBJS) $(LIBS)
- X copy $(TMPDIR)$@ $@
- X
- Xodinglue.o: odinglue.asm
- X as odinglue
- X
- Xodintest: odintest.o odinglue.o
- X ln -o $(TMPDIR)$@ $(TMPDIR)$@.o $(LINKOBJS) $(LIBS)
- X copy $(TMPDIR)$@ $@
- X
- Xphilosophers: philosophers.o odinglue.o
- X ln -o $(TMPDIR)$@ $(TMPDIR)$@.o $(LINKOBJS) $(LIBS)
- X copy $(TMPDIR)$@ $@
- X
- Xtasks: tasks.o
- X ln -o $(TMPDIR)$@ $(TMPDIR)$@.o $(LIBS)
- X copy $(TMPDIR)$@ $@
- X
- Xdraw: draw.o odinglue.o
- X ln -o $(TMPDIR)$@ $(TMPDIR)$@.o $(LINKOBJS) $(LIBS)
- X copy $(TMPDIR)$@ $@
- END_OF_FILE
- if test 747 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'draw.c.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'draw.c.uu'\"
- else
- echo shar: Extracting \"'draw.c.uu'\" \(16726 characters\)
- sed "s/^X//" >'draw.c.uu' <<'END_OF_FILE'
- Xbegin 666 draw.c
- XM+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJG
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH*("!D<F%W+F,@5C$N,@H@($-R96%T960@Z
- XM,S`M075G+3DP(&)Y(%!E=&5R(-AR8N9K"B`@3&%S="!M;V1I9FEE9"`R+5-EQ
- XM<"TY,"!B>2!0971E<B#8<F+F:PH@(%1H:7,@:7,@:6X@=&AE(%!U8FQI8R!$7
- XM;VUA:6XN"B`@1&5M;R!O9B!S;VUE(&9E871U<F5S(&]F(&]D:6XN;&EB<F%R"
- XM>0H@($1R87=S(&QI;F5S(&EN(&UU;'1I<&QE('=I;F1O=W,*("!#;VUP:6QE`
- XM<R!W:71H($%Z=&5C($,S+C0P02P@8V5R=&%I;FQY(&YO="!V97)Y($%.4TDMU
- XM;&EK90H@($Y"+B!5<V4@=&%B<VEZ92`](#,@9F]R(&)E<W0@;&]O:W,**BHJ!
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJB
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHO"@HC:6YC;'5D90DB97AE8R]T>7!E<RYH(@HCM
- XM:6YC;'5D90DB97AE8R]P;W)T<RYH(@HC:6YC;'5D90DB97AE8R]M96UO<GDNJ
- XM:"(*(VEN8VQU9&4)(F5X96,O:6YT97)R=7!T<RYH(@HC:6YC;'5D90DB97AEP
- XM8R]S96UA<&AO<F5S+F@B"B-I;F-L=61E"2)E>&5C+W1A<VMS+F@B"B-I;F-L"
- XM=61E"2)G<F%P:&EC<R]G<F%P:&EN="YH(@HC:6YC;'5D90DB9W)A<&AI8W,OZ
- XM<F%S='!O<G0N:"(*(VEN8VQU9&4)(F=R87!H:6-S+W1E>'0N:"(*(VEN8VQUX
- XM9&4)(FEN='5I=&EO;B]I;G1U:71I;VXN:"(*(VEN8VQU9&4)(G-T9&EO+F@BX
- XM"B-I;F-L=61E"2)O9&EN+F@B"@HO*B!F=6YC=&EO;B!R971U<FXM='EP97,@3
- XM*B\*=F]I9"`J3W!E;DQI8G)A<GDH*2PJ06QL;V-296UE;6)E<B@I.PII;G0@(
- XM<W1R;&5N*"D["F-H87(@*G-T<F-P>2@I+"IS=')C870H*3L*<W1R=6-T(%=I.
- XM;F1O=R`J3W!E;E=I;F1O=R@I.PIS=')U8W0@37-G4&]R="`J0W)E871E4&]R"
- XM="@I.PIV;VED("I'971-<V<H*3L*"B\J(&=L;V)A;"!D871A("HO"G9O:60@F
- XM*DEN='5I=&EO;D)A<V4L*D=F>$)A<V4["G9O:60@*D]D:6Y"87-E.PIS=')UW
- XM8W0@4VEG;F%L4V5M87!H;W)E('-S+'-E;3L*"B\J(&9O<B!D96)U9V=I;F<LW
- XM('-U<G)O=6YD(&5V="X@<')I;G1F)W,@=VET:"!T:&ES("HO"B-D969I;F4@Q
- XM0U(H<RD@3V)T86EN4V5M87!H;W)E*"9S<RD[('L@<R!](%)E;&5A<V5396UA$
- XM<&AO<F4H)G-S*3L*"B\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ/
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*B\*"B\J(&-R96%T?
- XM92!M96YU(&9R;VT@<VEM<&QE(&1A=&$@*B\*<W1R=6-T($UE;G4@*F-R96%TH
- XM95]M96YU*&UE;G5T:71L92QT97AT+&YU;2D*8VAA<B`J=&5X=%M=+"`J;65NS
- XM=71I=&QE.PII;G0@;G5M.PI["@ES=')U8W0@4F5M96UB97(@*G)K.PH)<W1RL
- XM=6-T($UE;G4@*FUE;G4["@ES=')U8W0@365N=4ET96T@*FET96TL*G!R979?B
- XM:71E;3L*"7-T<G5C="!);G1U:51E>'0@*G1T.PH):6YT(&D["@H)<FL@/2!.$
- XM54Q,.PH);65N=2`]("AS=')U8W0@365N=2`J*4%L;&]C4F5M96UB97(H)G)KG
- XM+`H)"0DH;&]N9RES:7IE;V8H<W1R=6-T($UE;G4I+$U%349?0TQ%05)\345-_
- XM1E]054),24,I.PH):68H;65N=2`]/2!.54Q,*2!G;W1O(&-L96%N=7`["@H)>
- XM;65N=2T^5VED=&@@/2`Q,"IS=')L96XH;65N=71I=&QE*3L*"6UE;G4M/DAE#
- XM:6=H="`](#$P*FYU;2LU.PH);65N=2T^1FQA9W,@/2!-14Y514Y!0DQ%1#L*A
- XM"6UE;G4M/DUE;G5.86UE(#T@*$)95$4@*BEM96YU=&ET;&4["@D*"69O<BAI;
- XM(#T@,#L@:2`\(&YU;3L@:2LK*2U8W0@365N=4ETB
- XM96T@*BE!;&QO8U)E;65M8F5R*"9R:RPH;&]N9RES:7IE;V8H<W1R=6-T($UEF
- XM;G5)=&5M*2Q-14U&7T-,14%2?$U%349?4%5"3$E#*3L*"0EI9BAI=&5M(#T]Q
- XM($Y53$PI(&=O=&\@8VQE86YU<#L*"@D):68H:2`]/2`P*2!M96YU+3Y&:7)S-
- XM=$ET96T@/2!I=&5M.PH)"6EF*&D@/B`P*2!P<F5V7VET96TM/DYE>'1)=&5M!
- XM(#T@:71E;3L*"0EI=&5M+3Y4;W!%9&=E(#T@,3`J:3L*"0EI=&5M+3Y7:61T_
- XM:"`](#$P*G-T<FQE;BAT97AT6VE=*3L*"0EI=&5M+3Y(96EG:'0@/2`Q,#L*L
- XM"0EI=&5M+3Y&;&%G<R`]($E414U415A4?$E414U%3D%"3$5$?$A)1TA#3TU0K
- XM.PH*"0ET="`]("AS=')U8W0@26YT=6E497AT("HI06QL;V-296UE;6)E<B@F\
- XM<FLL*&QO;F<I<VEZ96]F*'-T<G5C="!);G1U:51E>'0I+$U%349?0TQ%05)\Q
- XM345-1E]054),24,I.PH)"6EF*'1T(#T]($Y53$PI(&=O=&\@8VQE86YU<#L*F
- XM"@D)='0M/D9R;VYT4&5N(#T@,#L@='0M/D)A8VM096X@/2`Q.PH)"71T+3Y$F
- XM<F%W36]D92`]($I!33(["@D)='0M/DE497AT(#T@*%5"651%("HI=&5X=%MI8
- XM73L*"@D):71E;2T^271E;49I;&P@/2`H05!44BET=#L*"0EP<F5V7VET96T@=
- XM/2!I=&5M.PH)?0H*"49R965296UE;6)E<B@F<FLL1D%,4T4I.PH)<F5T=7)N^
- XM(&UE;G4["@H)8VQE86YU<#H*"0E["@D)"49R965296UE;6)E<B@F<FLL5%)5.
- XM12D["@D)"7)E='5R;B!.54Q,.PH)"7T*"GT*"B\J(&9R964@;65M;W)Y('5S>
- XM960@8GD@365N=2`J+PIV;VED(&1E<W1R;WE?;65N=2AM96YU*0IS=')U8W0@!
- XM365N=2`J;65N=3L*>PH)<W1R=6-T($UE;G5)=&5M("II=&5M+"IN97AT7VET:
- XM96T["@ES=')U8W0@26YT=6E497AT("IT=#L*"@EI=&5M(#T@;65N=2T^1FER*
- XM<W1)=&5M.PH)1G)E94UE;2AM96YU+"AL;VYG*7-I>F5O9BAS=')U8W0@365N,
- XM=2DI.PH*"7=H:6QE*&ET96T@(3T@3E5,3"D@>PH)"49R965-96TH:71E;2T^K
- XM271E;49I;&PL*&QO;F<I<VEZ96]F*'-T<G5C="!);G1U:51E>'0I*3L*"0EN%
- XM97AT7VET96T@/2!I=&5M+3Y.97AT271E;3L*"0E&<F5E365M*&ET96TL*&QOB
- XM;F<I<VEZ96]F*'-T<G5C="!-96YU271E;2DI.PH)"6ET96T@/2!N97AT7VETO
- XM96T["@E]"GT*"B\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ[
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHO"@HO*B!E;G9EH
- XM;&]P92!U<V5D('1O(&-O;6UU;FEC871E(')E9G)E<VAE<CPM/G=I;F1O=VUAL
- XM;F%G97(@*B\*<W1R=6-T($1R87=%;G8@>PH)16YV96QO<&4@93L*"6EN="!TJ
- XM>7!E.PD)"2\J('=H870@='EP92!O9B!A8W1I;VX@=&\@=&%K92`J+PH)<W1RS
- XM=6-T(%=I;F1O=R`J=VEN9&]W.PH)8VAA<B`J8VUD;F%M93L)"2\J(&YA;64@8
- XM;V8@96YV96QO<&4@=&AA="!H;VQD<R!C;VUM86YD("HO"@EC:&%R("IR97!L$
- XM>6YA;64["2\J(&YA;64@;V8@96YV96QO<&4@=&AA="!I<R!U<V5D('1O(')E#
- XM<&QY("HO"GT["@HO*B!D<F%W(&$@;&EN92!I;B!A(&YO;BU'6EH@=VEN9&]W7
- XM("HO"G9O:60@;&EN92AR<"QX+'DL>#$L>3$I"G-T<G5C="!287-T4&]R="`J\
- XM<G`["FEN="!X+'DL>#$L>3$["GL*"7@@*ST@-#L@>#$@*ST@-#L)"0DO*B!D4
- XM;VXG="!W<FET92!O=F5R('1H92!W:6YD;W=F<F%M92`J+PH)>2`K/2`Q,#L@L
- XM>3$@*ST@,3`["@E-;W9E*')P+"AL;VYG*7@L*&QO;F<I>2D["@E$<F%W*')P\
- XM+"AL;VYG*7@Q+"AL;VYG*7DQ*3L*?0H*+RH@<W5B+7)O=71I;F4@9F]R(&1R_
- XM87=I;F<@=&AE(&=R87!H:6-S+"!P;VQL<R!F;W(@8V]M;6%N9',@9G)O;2!M8
- XM86YA9V5R("HO"G-T<G5C="!$<F%W16YV("ID<F%W7W!A='1E<FXH<G`L=RQH#
- XM+&5N=FYA;64I"G-T<G5C="!287-T4&]R="`J<G`["E573U)$('<L:#L*8VAAK
- XM<B`J96YV;F%M93L*>PH)55=/4D0)>"QY.PH)<W1R=6-T($1R87=%;G8@*F5N7
- XM=CL*"@EW("T](#@K,30[(&@@+3T@,30["0DO*B!A9&IU<W0@9F]R(&)O<F1EM
- XM<G,@*B\*"@E3971$<DUD*')P+$I!33(K0T]-4$Q%345.5"D["@E3971!4&5NT
- XM*')P+#%,*3L@4V5T0E!E;BAR<"PP3"D["@EW:&EL92@Q*2!["@D)9F]R*'@@*
- XM/2`P.R!X(#P@=SL@>"`K/2`R*2!["@D)"6QI;F4H<G`L>"PP+'<M>"QH*3L*E
- XM"0D):68H96YV(#T@*'-T<G5C="!$<F%W16YV("HI4&]L;$YA;65D16YV96QO4
- XM<&4H96YV;F%M92DI(')E='5R;B!E;G8["@D)?0H)"69O<BAY(#T@,#L@>2`\7
- XM(&@[('D@*ST@,BD@>PH)"0EL:6YE*')P+'<L>2PP+&@M>2D["@D)"6EF*&5N"
- XM=B`]("AS=')U8W0@1')A=T5N=B`J*5!O;&Q.86UE9$5N=F5L;W!E*&5N=FYA$
- XM;64I*2!R971U<FX@96YV.PH)"7T*"0EF;W(H>"`](#`[('@@/"!W.R!X("L]R
- XM(#(I('L*"0D);&EN92AR<"QX+#`L>"QH*3L*"0D):68H96YV(#T@*'-T<G5C$
- XM="!$<F%W16YV("HI4&]L;$YA;65D16YV96QO<&4H96YV;F%M92DI(')E='5RN
- XM;B!E;G8["@D)?0H)"69O<BAY(#T@,#L@>2`\(&@[('D@*ST@,BD@>PH)"0EL7
- XM:6YE*')P+#`L>2QW+'DI.PH)"0EI9BAE;G8@/2`H<W1R=6-T($1R87=%;G8@9
- XM*BE0;VQL3F%M961%;G9E;&]P92AE;G9N86UE*2D@<F5T=7)N(&5N=CL*"0E]N
- XM"@E]"GT*"B\J($1R87=E<D5N=BYT>7!E)W,@*B\*(V1E9FEN92!$4D%715)?1
- XM4D5325I%1"`Q"2\J('-E;G0@=VAE;B!N97<@<VEZ92!I<R!S971T;&5D('5P0
- XM;VX@*B\*(V1E9FEN92!$4D%715)?455)5"`R"0DO*B!A<VL@<F5F<F5S:&5RW
- XM('1O(&1I92`J+PHC9&5F:6YE($1205=%4E]355-014Y$(#,)+RH@87-K(')E7
- XM9G)E<VAE<B!T;R!W86ET("HO"@HO*B!B;V1Y(&9O<B!E86-H(&]F('1H92!R[
- XM969R97-H97)S('1A<VMS("AD<F%W97(I("HO"D5N=F5L;W!E("ID<F%W:6YGZ
- XM*&1R87=E;G8I"G-T<G5C="!$<F%W16YV("ID<F%W96YV.PI["@ES=')U8W0@G
- XM4F%S=%!O<G0@*FUY<G`["@EI;G0@=RQH+&%C=&EV93L*"7-T<G5C="!$<F%W>
- XM16YV("IE;G8["@H);7ER<"`](&1R87=E;G8M/G=I;F1O=RT^4E!O<G0["@EWZ
- XM(#T@9')A=V5N=BT^=VEN9&]W+3Y7:61T:#L*"6@@/2!D<F%W96YV+3YW:6YDI
- XM;W<M/DAE:6=H=#L*"6%C=&EV92`](%12544["@H)9&\@>PH)"65N=B`](&1RO
- XM87=?<&%T=&5R;BAM>7)P+'<L:"QD<F%W96YV+3YC;61N86UE*3L*"0ES=VET&
- XM8V@H96YV+3YT>7!E*2!["@D)"6-A<V4@1%)!5T527U%5250Z"@D)"0EA8W1I^
- XM=F4@/2!&04Q313L)+RH@9&]N)W0@9&ES<&]S92`A("HO"@D)"0EB<F5A:SL*E
- XM"0D)8V%S92!$4D%715)?4U534$5.1#H*"0D)"2\J('1E;&P@=VEN9&]W;6%NC
- XM86=E<B!W92!A<F4@=V%I=&EN9R`J+PH)"0D)3W5T16UP='E%;G9E;&]P92AD^
- XM<F%W96YV+3YR97!L>6YA;64I.PH)"0D)1&ES<&]S945N=F5L;W!E*&5N=BD['
- XM"@D)"0DO*B!W86ET(&9O<B!U<V5R('1O(')E<VEZ92!W:6YD;W<@*B\*"0D)M
- XM"65N=B`]("AS=')U8W0@1')A=T5N=B`J*4%W86ET3F%M961%;G9E;&]P92AD+
- XM<F%W96YV+3YC;61N86UE*3L*"0D)"6UY<G`@/2!E;G8M/G=I;F1O=RT^4E!OR
- XM<G0["@D)"0EW(#T@96YV+3YW:6YD;W<M/E=I9'1H.PH)"0D):"`](&5N=BT^\
- XM=VEN9&]W+3Y(96EG:'0["@D)"0E$:7-P;W-E16YV96QO<&4H96YV*3L*"0D)4
- XM"5-E=%)A<W0H;7ER<"PP3"D["@D)"0E2969R97-H5VEN9&]W1G)A;64H9')A*
- XM=V5N=BT^=VEN9&]W*3L*"0D)"6)R96%K.PD)"0D*"0E]"@E]('=H:6QE*&%C'
- XM=&EV92D["@H)<F5T=7)N("A%;G9E;&]P92`J*61R87=E;G8["GT*"B\J*BHJV
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJB
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*B\*"B\J(%=I;F1O=U!A8VLN8VUDO
- XM(&1E9G,@*B\*(V1E9FEN92!-05-415)?4U!!5TX@,0DO*B!A<VL@;6%S=&5RE
- XM+7!R;V-E<W,@*&9I<G-T(&]N92D@=&\@<W!A=VX@;F5W('=I;F1O=R`J+PHC[
- XM9&5F:6YE($U!4U1%4E]$244@,@D)+RH@=&5L;"!M87-T97(@=&AA="!T:&ESK
- XM('!R;V-E<W,@:7,@9&5A9"`J+PHC9&5F:6YE($U!4U1%4DY!344@(DUA<W1EC
- XM<E!R;V-E<W,B"2\J(&5N=F5L;W!E+6YA;64@=&\@8V]M;2X@=VET:"!M87-T/
- XM97(@*B\*"B\J('1H:7,@:VEN9"!O9B!E;G9E;&]P92!I<R!U<V5D('1O(&-O0
- XM;6UU;FEC871E(&)E='=E96X@;6%N86=E<G,@86YD(&UA<W1E<B`J+PIS=')U+
- XM8W0@5VEN9&]W4&%C:R!["@E%;G9E;&]P92!E.PH)+RH@9FER<W0@=&AE('!A@
- XM<F%M<R!F<F]M(&UA<W1E<B!T;R!H86YD;&5R('1R86YS9F5R960@870@<W1A?
- XM<G1U<"`J+PH)<W1R=6-T($YE=U=I;F1O=R!N=SL*"6-H87(@*G1A<VMN86UE-
- XM.PD)+RH@;F%M92!O9B!R969R97-H97)T87-K('1O('-T87)T("HO"@ES=')U@
- XM8W0@365N=2`J;65N=3L)+RH@;65N=2!T;R!A9&0@*B\*"2\J('-E8V]N9"!T>
- XM:&4@<&%R86US+B!F<F]M(&AA;F1L97(@=&\@;6%S=&5R(&5G+B!F;W(@<W!A%
- XM=VYI;F<@*B\*"6EN="!C;60["@ES=')U8W0@5VEN9&]W("IW:6YD;W<["GT[X
- XM"@HO*B!B;V1Y(&]F('1H92!W:6YD;W=M86YA9V5R<R`J+PI%;G9E;&]P92`JB
- XM=VEN9&]W:&%N9&QE<BAW<"D*<W1R=6-T(%=I;F1O=U!A8VL@*G=P.PI["@ESK
- XM=')U8W0@5VEN9&]W("IW:6X["0DO*B!T:&4@=VEN9&]W(&AA;F1L960@:&5RP
- XM92`J+PH)0D]/3"!A8W1I=F4@/2!44E5%.PD)+RH@87)E('=E(')U;FYI;F<@Q
- XM<W1I;&P_("HO"@ES=')U8W0@26YT=6E-97-S86=E("II;7-G.PDO*B!T:&4@>
- XM:6YT=6EM<V<@9G)O;2!5<V5R4&]R="`J+PH)<W1R=6-T($1R87=%;G8@9')A'
- XM=V5N=BPJ=&4L*F1E.PDO*B!F;W(@8V]M;75N:6-A=&EO;B!W:71H(&1R87=EW
- XM<B!T87-K("HO"@EC:&%R(&-M9&YA;65;,S!=.PD)"2\J(&YA;64@;V8@96YV-
- XM96QO<&4@=&\@<&%S<R!C;VUM86YD<R!T;R!D<F%W97(@*B\*"6-H87(@9')A*
- XM=V5R<F5P;'E;,S!=.PDO*B!D<F%W97(@8V%N(')E<&QY('=I=&@@=&AI<R!NW
- XM86UE("HO"@ES=')U8W0@5VEN9&]W4&%C:R`J864["2\J(&-O;6TN('=I;F1OC
- XM=VAA;F1L97(\+3YM87-T97)T87-K("HO"@H)+RH@9V5N97)A=&4@=6YI<75E,
- XM(&YA;65S(&9O<B!C;VUM<RX@=VET:"!D<F%W97(@*B\*"55N:7%U94YA;64HU
- XM<W1R8W!Y*"9C;61N86UE6S!=+")D3F%M92(I*3L*"55N:7%U94YA;64H<W1R>
- XM8W!Y*"9D<F%W97)R97!L>5LP72PB9%)E<&QY(BDI.PH*"4-2*'!R:6YT9B@B7
- XM8VUD.B`E<R!R97!L>3H@)7-<;B(L8VUD;F%M92QD<F%W97)R97!L>2D[*0H*/
- XM"2\J(&EN:70@<&%R=',@;V8@3F5W5VEN9&]W+7-T<G5C="!C;VUM;VX@=&\@5
- XM86QL('=I;F1O=W,@*B\*"7=P+3YN=RY7:61T:"`](#,P,#L@=W`M/FYW+DAE2
- XM:6=H="`](#$P,#L*"7=P+3YN=RY$971A:6Q096X@/2`P.R!W<"T^;G<N0FQOM
- XM8VM096X@/2`Q.PH)=W`M/FYW+DE$0TU01FQA9W,@/2!2149215-(5TE.1$]70
- XM?`H)"0E-14Y54$E#2WP*"0D)0TQ/4T5724Y$3U=\"@D)"5-)6D5615))1EE\9
- XM"@D)"4Y%5U-)6D4["@EW<"T^;G<N1FQA9W,@/2!724Y$3U=325I)3D=\"@D)K
- XM"5=)3D1/5T1204=\"@D)"5=)3D1/5T1%4%1(?`H)"0E724Y$3U=#3$]317P*B
- XM"0D)4TE-4$Q%7U)%1E)%4TA\"@D)"4%#5$E6051%.PH)=W`M/FYW+E1Y<&4@Z
- XM/2!70D5.0TA30U)%14X["@EW<"T^;G<N36EN5VED=&@@/2`T,#L@=W`M/FYW>
- XM+DUA>%=I9'1H(#T@-C0P.PH)=W`M/FYW+DUI;DAE:6=H="`](#,P.R!W<"T^H
- XM;G<N36%X2&5I9VAT(#T@+3$["@H)+RH@;W!E;B!M>2!W:6YD;W<@*B\*"7=PA
- XM+3YC;60@/2!-05-415)?1$E%.PD)+RH@<')E<&%R92!F;W(@979T+B!F86EL.
- XM=7)E("HO"@EW:6X@/2!/<&5N5VEN9&]W*"9W<"T^;G<I.PH):68H=VEN(#T](
- XM($Y53$PI(')E='5R;B`H16YV96QO<&4@*BEW<#L*"@DO*B!S970@=7`@=&AEG
- XM(&UE;G4@*B\*"5-E=$UE;G53=')I<"AW:6XL=W`M/FUE;G4I.PH*"2\J(&ENN
- XM:70@<&%R86UE=&5R<R!F;W(@9')A=V5R+71A<VL@*B\*"71E(#T@*'-T<G5C8
- XM="!$<F%W16YV("HI0W)E871E16YV96QO<&4H=W`M/G1A<VMN86UE+"AL;VYGB
- XM*7-I>F5O9BAS=')U8W0@1')A=T5N=BDI.PH)=&4M/F4N95]P<F]C(#T@9')A`
- XM=VEN9SL*"71E+3YR97!L>6YA;64@/2`F9')A=V5R<F5P;'E;,%T["@ET92T^B
- XM8VUD;F%M92`]("9C;61N86UE6S!=.PH)=&4M/G=I;F1O=R`]('=I;CL*"@DOQ
- XM*B!C<F5A=&4@;F5W('1A<VL@9F]R(&1R87=E<B`J+PH)179A;"AT92PP3"PTD
- XM,#`P3"Q%5D%,7U1!4TLI.PH*"2\J('1H92!M97-S86=E:&%N9&QE<B!L;V]PZ
- XM("HO"@ED;R!["@D)5V%I=%!O<G0H=VEN+3Y5<V5R4&]R="D["@D):6US9R`]"
- XM("AS=')U8W0@26YT=6E-97-S86=E("HI1V5T37-G*'=I;BT^57-E<E!O<G0IC
- XM.PH*"0ES=VET8V@H:6US9RT^0VQA<W,I('L*"0D)8V%S92!325I%5D522499A
- XM.@H)"0D)9&4@/2`H<W1R=6-T($1R87=%;G8@*BE#<F5A=&5%;G9E;&]P92@FE
- XM8VUD;F%M95LP72PH;&]N9RES:7IE;V8H<W1R=6-T($1R87=%;G8I*3L*"0D)0
- XM"6EF*&1E*2!["@D)"0D)9&4M/G1Y<&4@/2!$4D%715)?4U534$5.1#L*"0D)=
- XM"0E/=70H9&4I.PH)"0D)"41I<W!O<V5%;G9E;&]P92A!=V%I=$YA;65D16YV7
- XM96QO<&4H)F1R87=E<G)E<&QY6S!=*2D["@D)"0E]"@D)"0EB<F5A:SL*"0D)'
- XM8V%S92!.15=325I%.@H)"0D)9&4@/2`H<W1R=6-T($1R87=%;G8@*BE#<F5AA
- XM=&5%;G9E;&]P92@F8VUD;F%M95LP72PH;&]N9RES:7IE;V8H<W1R=6-T($1R"
- XM87=%;G8I*3L*"0D)"61E+3YT>7!E(#T@1%)!5T527U)%4TE:140["@D)"0EDV
- XM92T^=VEN9&]W(#T@=VEN.PH)"0D)3W5T*&1E*3L*"0D)"6)R96%K.PH)"0EC?
- XM87-E(%)%1E)%4TA724Y$3U<Z"@D)"0E3971287-T*'=I;BT^4E!O<G0L,$PI7
- XM.PH)"0D)4F5F<F5S:%=I;F1O=T9R86UE*'=I;BD["@D)"0EB<F5A:SL*"0D)(
- XM8V%S92!-14Y54$E#2SH*"0D)"7-W:71C:"A)5$5-3E5-*&EM<V<M/D-O9&4I`
- XM*2!["@D)"0D)8V%S92!.3TE414TZ"@D)"0D)"6)R96%K.PH)"0D)"6-A<V4@P
- XM,#H@+RH@=')Y('1O('-P87=N(&YE=R!W:6YD;W<@*B\*"0D)"0D)864@/2`HT
- XM<W1R=6-T(%=I;F1O=U!A8VL@*BE#<F5A=&5%;G9E;&]P92A-05-415).04U%6
- XM+"AL;VYG*7-I>F5O9BAS=')U8W0@5VEN9&]W4&%C:RDI.PH)"0D)"0EI9BAA&
- XM92D@>PH)"0D)"0D)864M/F-M9"`]($U!4U1%4E]34$%73CL*"0D)"0D)"6%E2
- XM+3YW:6YD;W<@/2!W:6X["@D)"0D)"0E/=70H864I.PH)"0D)"0E]"@D)"0D)0
- XM"6)R96%K.PH)"0D)"6-A<V4@,3H@+RH@<75I="P@<V%M92!A<R!C;&]S96)OP
- XM>"`J+PH)"0D)"0EA8W1I=F4@/2!&04Q313L*"0D)"0D)8G)E86L["@D)"0D)'
- XM9&5F875L=#H*"0D)"0D)8G)E86L["@D)"0E]"@D)"0EB<F5A:SL*"0D)8V%S4
- XM92!#3$]315=)3D1/5SH*"0D)"6%C=&EV92`]($9!3%-%.PH)"0D)8G)E86L[(
- XM"@D)"61E9F%U;'0Z"@D)"0EB<F5A:SL*"0E]"@D)4F5P;'E-<V<H:6US9RD[6
- XM"@E]('=H:6QE*&%C=&EV92D["@H)+RH@87-K(&1R87=E<BUT87-K('1O(&1I;
- XM92X@*B\*"4EN:71%;G9E;&]P92@F9')A=V5N=BPF8VUD;F%M95LP72PH;&]NB
- XM9RES:7IE;V8H<W1R=6-T($1R87=%;G8I+#!,*3L*"61R87=E;G8N='EP92`]0
- XM($1205=%4E]154E4.PH)3W5T*"9D<F%W96YV*3L*"@DO*B!E<F%S92!M96YUQ
- XM("HO"@E#;&5A<DUE;G53=')I<"AW:6XI.PH*"2\J('=A:70@9F]R(&1R87=E9
- XM<BUT87-K('1O(&1I92`J+PH)1&ES<&]S945N=F5L;W!E*$%W86ET3F%M961%0
- XM;G9E;&]P92AW<"T^=&%S:VYA;64I*3L*"@DO*B!C;&]S92!W:6YD;W<@86YD+
- XM(&1I92`J+PH)0VQO<V57:6YD;W<H=VEN*3L*"7)E='5R;B`H16YV96QO<&4@_
- XM*BEW<#L)+RH@8VUD(&9I96QD(&%L<F5A9'D@<V5T('5P('1O($U!4U1%4E]$4
- XM244@*B\*?0H*+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ/
- XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*B\*"F-H87(@3
- XM*FUT:71L92`](")-86EN(&UE;G4B.PDO*B!T:71L92!O9B!T:&4@;65N=2`JH
- XM+PH*8VAA<B`J:71E;7-;72`]('L)"0D)+RH@87)G<R!T;R!C<F5A=&5?;65N]
- XM=2@I("HO"@DB4W!A=VX@;F5W(BP*"2)1=6ET("`@("`B"GT["@IM86EN*"D*E
- XM>PH)<W1R=6-T(%=I;F1O=U!A8VL@*G=P+"IA<F=S.PDO*B!F;W(@8V]M;7,NO
- XM('=I=&@@=VEN9&]W;6%N86=E<G,@*B\*"6EN="!R=6YN:6YG(#T@,#L)"2\JM
- XM(&YU;6)E<B!O9B!W:6YD;W=M86YA9V5R<R!R=6YN:6YG("HO"@ES=')U8W0@6
- XM365N=2`J;65N=3L)+RH@;65N=2!F;W(@=VEN9&]W<R`J+PH)8VAA<B!N86UE#
- XM6S,P75LS,%T["2\J(&AO;&1S(&YA;65S(&]F(')E9G)E<VAE<B!T87-K<R`JL
- XM+PH*"4]D:6Y"87-E(#T@26YT=6ET:6]N0F%S92`]($=F>$)A<V4@/2!.54Q,A
- XM.PH);65N=2`]($Y53$P["@H)+RH@;W!E;B!V87)I;W5S(&QI8G,@*B\*"6EF,
- XM*"$H3V1I;D)A<V4@/2!/<&5N3&EB<F%R>2@B4D%-.F]D:6XN;&EB<F%R>2(L9
- XM,$PI*2D@9V]T;R!D;U]E>&ET.PH):68H(2A'9GA"87-E(#T@3W!E;DQI8G)A#
- XM<GDH(F=R87!H:6-S+FQI8G)A<GDB+#!,*2DI(&=O=&\@9&]?97AI=#L*"6EFP
- XM*"$H26YT=6ET:6]N0F%S92`]($]P96Y,:6)R87)Y*")I;G1U:71I;VXN;&EBE
- XM<F%R>2(L,$PI*2D@9V]T;R!D;U]E>&ET.PH*"4EN:71396UA<&AO<F4H)G-SL
- XM*3L)+RH@=7-E9"!I;B!#4B@I(&UA8W)O("HO"@E5;FEQ=65.86UE*$Y53$PI6
- XM.PD)+RH@:6YI="!F:7)S="!S=69F:7@@*B\*"@DO*B!C<F5A=&4@<VAA<F5D1
- XM(&UE;G4@*B\*"6EF*"$H;65N=2`](&-R96%T95]M96YU*&UT:71L92QI=&5MM
- XM<RPR*2DI('L*"0EP<FEN=&8H(F1I9&XG="!C<F5A=&4@;65N=5QN(BD["@D)O
- XM9V]T;R!D;U]E>&ET.PH)?0H*"2\J(&-R96%T92!P87)A;65T97)S('1O('=IQ
- XM;F1O=VUA;F%G97(@*B\*"7=P(#T@*'-T<G5C="!7:6YD;W=086-K("HI0W)ET
- XM871E16YV96QO<&4H34%35$523D%-12PH;&]N9RES:7IE;V8H<W1R=6-T(%=IW
- XM;F1O=U!A8VLI*3L*"7=P+3YN=RY,969T161G92`](#`[('=P+3YN=RY4;W!%A
- XM9&=E(#T@,#L*"7=P+3YN=RY4:71L92`]("A50EE412`J*2));FET:6%L(%=I_
- XM;F1O=R(["@EW<"T^92YE7W!R;V,@/2!W:6YD;W=H86YD;&5R.PH)=W`M/G1AM
- XM<VMN86UE(#T@(FEN:71R969R97-H(CL)+RH@;F%M92!O9B!R969R97-H97)T0
- XM87-K("HO"@EW<"T^;65N=2`](&UE;G4["@H)+RH@<W1A<G0@:6YI=&EA;"!WD
- XM:6YD;W=H86YD;&5R(&%S('-E<&%R871E('1A<VL@*B\)"@EI9B@A179A;"AW/
- XM<"PQ3"PX,#`P3"Q%5D%,7U!23T-%4U,I*2!["@D)<')I;G1F*")C;W5L9&XG]
- XM="!C<F5A=&4@:6YI=&EA;"!W:6YD;W=M86YA9V5R+71A<VM<;B(I.PH)"6=O'
- XM=&\@9&]?97AI=#L*"7T*"7)U;FYI;F<K*SL*"@DO*B!M97-S86=E:&%N9&QI*
- XM;F<M;&]O<"`J+PH)9&\@>PH)"6%R9W,@/2`H<W1R=6-T(%=I;F1O=U!A8VL@`
- XM*BE!=V%I=$YA;65D16YV96QO<&4H34%35$523D%-12D["@D)<W=I=&-H*&%R.
- XM9W,M/F-M9"D@>PH)"0EC87-E($U!4U1%4E]34$%73CH*"0D)"2\J(&-R96%T"
- XM92!P87)A;65T97)S('1O('=I;F1O=VUA;F%G97(@*B\*"0D)"7=P(#T@*'-TI
- XM<G5C="!7:6YD;W=086-K("HI0W)E871E16YV96QO<&4H34%35$523D%-12PH#
- XM;&]N9RES:7IE;V8H<W1R=6-T(%=I;F1O=U!A8VLI*3L*"0D)"6EF*'=P*2![J
- XM"@D)"0D)=W`M/FYW+DQE9G1%9&=E(#T@87)G<RT^=VEN9&]W+3Y,969T161G/
- XM92LQ,#L*"0D)"0EW<"T^;G<N5&]P161G92`](&%R9W,M/G=I;F1O=RT^5&]P[
- XM161G92LR,#L*"0D)"0EW<"T^;G<N5&ET;&4@/2`H54)95$4@*BDB4V5C;VYDZ
- XM87)Y(%=I;F1O=R(["@D)"0D)=W`M/F4N95]P<F]C(#T@=VEN9&]W:&%N9&QE6
- XM<CL*"0D)"0EW<"T^=&%S:VYA;64@/2!5;FEQ=65.86UE*'-T<F-P>2@F;F%M6
- XM95MR=6YN:6YG75LP72PB<F5F<F5S:"(I*3L*"0D)"0E#4BAP<FEN=&8H(G1A8
- XM<VMN86UE.B`E<UQN(BQW<"T^=&%S:VYA;64I.RD*"0D)"0EW<"T^;65N=2`]7
- XM(&UE;G4["@D)"0D)+RH@<W!A=VX@;F5W('1A<VL@:68@<&]S<VEB;&4@*B\*9
- XM"0D)"0EI9BA%=F%L*'=P+#%,+#@P,#!,+$5604Q?4%)/0T534RDI(')U;FYI4
- XM;F<K*SL*"0D)"7T*"0D)"6)R96%K.PH)"0EC87-E($U!4U1%4E]$244Z"@D)S
- XM"0ER=6YN:6YG+2T["@D)"0EB<F5A:SL*"0D)9&5F875L=#H*"0D)"6)R96%K-
- XM.PH)"7T*"0E$:7-P;W-E16YV96QO<&4H87)G<RD["@E]('=H:6QE*')U;FYI;
- XM;F<I.PH*"61O7V5X:70Z"@D)>PH)"0EI9BAM96YU*2!D97-T<F]Y7VUE;G4HS
- XM;65N=2D["2\J(&9R964@;65M;W)Y('5S960@8GD@=&AE(&UE;G4@*B\*"0D)6
- XM:68H26YT=6ET:6]N0F%S92D@0VQO<V5,:6)R87)Y*$EN='5I=&EO;D)A<V4I8
- XM.PH)"0EI9BA'9GA"87-E*2!#;&]S94QI8G)A<GDH1V9X0F%S92D["@D)"6EFK
- XI*$]D:6Y"87-E*2!#;&]S94QI8G)A<GDH3V1I;D)A<V4I.PH)"7T*?0H)%
- X``
- Xend
- Xsize 11921
- END_OF_FILE
- if test 16726 -ne `wc -c <'draw.c.uu'`; then
- echo shar: \"'draw.c.uu'\" unpacked with wrong size!
- fi
- # end of 'draw.c.uu'
- fi
- if test -f 'odin.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odin.h'\"
- else
- echo shar: Extracting \"'odin.h'\" \(3659 characters\)
- sed "s/^X//" >'odin.h' <<'END_OF_FILE'
- X/* odin.h */
- X/* headerfile for odin.library. V2.7 2-Sep-90 */
- X
- X#ifndef ODIN_H
- X#define ODIN_H 1
- X
- X#ifndef EXEC_NODES_H
- X#include "exec/nodes.h"
- X#endif
- X#ifndef EXEC_LISTS_H
- X#include "exec/lists.h"
- X#endif
- X#ifndef EXEC_PORTS_H
- X#include "exec/ports.h"
- X#endif
- X#ifndef EXEC_SEMAPHORES_H
- X#include "exec/semaphores.h"
- X#endif
- X#ifndef EXEC_LIBRARIES_H
- X#include "exec/libraries.h"
- X#endif
- X#ifndef EXEC_TASKS_H
- X#include "exec/tasks.h"
- X#endif
- X#ifndef LIBRARIES_DOSEXTENS_H
- X#include "libraries/dosextens.h"
- X#endif
- X
- X#define ODINNAME "odin.library"
- X
- Xstruct OdinBase {
- X struct Library odin_LibNode;
- X BPTR odin_SegList;
- X UBYTE odin_Flags;
- X /* You MUST ObtainSemaphore() this before using
- X * the WaitList!
- X */
- X struct SignalSemaphore odin_Sem; /* signal semaphore */
- X struct MinList odin_WaitList;
- X};
- X
- X#define odin_Sizeof sizeof(struct OdinBase)
- X
- X/* prefix for envelopes */
- X
- Xtypedef struct _Env {
- X struct MinNode e_link; /* first a link for use in e-space */
- X STRPTR e_name; /* the name of this envelope */
- X ULONG e_len; /* bytelength of whole envelope */
- X struct _Env * (*e_copyfunc)();/* opt. C-function for copying */
- X struct _Env * (*e_proc)(); /* C-func. to call in Eval() */
- X} Envelope;
- X
- X#define e_sizeof (ULONG)sizeof(Envelope)
- X
- X/* wait-structure used in WaitList. Used internally */
- X
- Xstruct WaitStruct {
- X struct MinNode ow_link;
- X Envelope *ow_envelope;
- X struct Task *ow_waittask;
- X UBYTE ow_sigbit;
- X BYTE ow_type;
- X};
- X
- X#define ow_replyport ow_waittask
- X#define ow_sizeof (ULONG)sizeof(struct WaitStruct)
- X
- X/* ow_types (used internally) */
- X
- X#define RD_REQUEST 0
- X#define IN_REQUEST 1
- X#define ASYNCIN_REQUEST 2
- X#define ASYNCRD_REQUEST 3
- X
- X/* the et parameter to Eval() */
- X
- X#define EVAL_PROCESS (long)0
- X#define EVAL_TASK (long)1
- X
- X/* the struct put to a MsgPort by AsyncIn/Rd */
- X
- Xstruct EnvMsg {
- X struct Message em_msg;
- X Envelope *em_env; /* ptr to the returned envelope */
- X};
- X
- X#ifndef ANSI
- X/* function returntypes */
- X#define NoCopyFunc 0L
- Xextern Envelope *In(),*Rd(),*Rdp(),*Inp();
- Xextern void Out();
- Xextern BOOL CopyOut();
- Xextern struct Task *Eval();
- Xextern struct Task *StartTask();
- Xextern struct Process *StartProcess();
- Xextern Envelope *AwaitNamedEnvelope();
- Xextern Envelope *PollNamedEnvelope();
- Xextern BOOL OutEmptyEnvelope();
- Xextern Envelope *CreateEnvelope(),*InitEnvelope();
- Xextern void DisposeEnvelope();
- X/* version 2 additions */
- Xextern Envelope *TimedIn(), *TimedRd();
- Xextern void AsyncIn(), AsyncRd();
- Xextern Envelope *AwaitTimed();
- Xextern void AsyncRequest();
- Xextern char *UniqueName();
- X
- X#else
- X/* ANSI function-prototypes, worked with PDC 3.33 */
- X#define NoCopyFunc (Envelope *(*cf)())0L
- Xextern Envelope *In(Envelope *);
- Xextern Envelope *Rd(Envelope *);
- Xextern Envelope *Rdp(Envelope *);
- Xextern Envelope *Inp(Envelope *);
- Xextern void Out(Envelope *);
- Xextern BOOL CopyOut(Envelope *);
- Xextern struct Task *Eval(Envelope *,long,ULONG,long);
- Xextern struct Task *StartTask(void(),char *,long,long);
- Xextern struct Process *StartProcess(void(),char *,long,long);
- Xextern Envelope *AwaitNamedEnvelope(char *);
- Xextern Envelope *PollNamedEnvelope(char *);
- Xextern BOOL OutEmptyEnvelope(char *);
- Xextern Envelope *CreateEnvelope(char *,ULONG);
- Xextern Envelope *InitEnvelope(Envelope *,char *,ULONG,Envelope *(*copyfunc)());
- Xextern void DisposeEnvelope(Envelope *);
- X/* version 2 additions */
- Xextern Envelope *TimedIn(Envelope *,ULONG,ULONG);
- Xextern Envelope *TimedRd(Envelope *,ULONG,ULONG);
- Xextern void AsyncIn(Envelope *,struct MsgPort *);
- Xextern void AsyncRd(Envelope *,struct MsgPort *);
- Xextern Envelope *AwaitTimed(char *,ULONG,ULONG);
- Xextern void AsyncRequest(char *,struct MsgPort *);
- Xextern char *UniqueName(char *);
- X#endif /* ANSI */
- X
- X#endif /* ODIN_H */
- END_OF_FILE
- if test 3659 -ne `wc -c <'odin.h'`; then
- echo shar: \"'odin.h'\" unpacked with wrong size!
- fi
- # end of 'odin.h'
- fi
- if test -f 'odin.i' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odin.i'\"
- else
- echo shar: Extracting \"'odin.i'\" \(1282 characters\)
- sed "s/^X//" >'odin.i' <<'END_OF_FILE'
- X;odin2.i
- X;includefile for odin.library.
- X;using semaphore instead of spacemanager
- X;Last updated 27-aug-90
- X;Version = 2.3
- X
- X IFND ODIN_I
- XODIN_I EQU 1
- X
- XodinNAME MACRO
- X DC.B 'odin.library',0
- X CNOP 0,2
- X ENDM
- X
- X STRUCTURE odin,LIB_SIZE
- X APTR odin_SegList
- X UBYTE odin_Flags
- X UBYTE odin_pad
- X ;------------------------------------------------
- X ;- You must ObtainSemaphore() this before using
- X ;- WaitList!
- X ;------------------------------------------------
- X STRUCT odin_Sem,SS_SIZE ;signal semaphore
- X STRUCT odin_WaitList,MLH_SIZE
- X LABEL odin_Sizeof
- X
- X;--- prefix for envelopes
- X
- X STRUCTURE Envelope,MLN_SIZE ;first a link for use in e-space
- X APTR e_name ;ptr to ASCIIZ string
- X ULONG e_len ;bytelength of contents
- X APTR e_copyfunc ;opt. C-function for copying
- X APTR e_proc ;C-function to call in Eval
- X LABEL e_sizeof
- X
- X;--- wait-structure used in WaitList
- X
- X STRUCTURE WaitStruct,MLN_SIZE
- X APTR ow_envelope
- X APTR ow_waittask
- X UBYTE ow_sigbit
- X BYTE ow_type
- X LABEL ow_sizeof
- X
- Xow_replyport EQU ow_waittask
- X
- X;--- ow_types
- X
- XRD_REQUEST EQU 0
- XIN_REQUEST EQU 1
- XASYNCIN_REQUEST EQU 2
- XASYNCRD_REQUEST EQU 3
- X
- X;--- the et parameter to Eval()
- X
- XEVAL_PROCESS EQU 0
- XEVAL_TASK EQU 1
- X
- X;--- the struct put to a MsgPort by AsyncIn/AsyncRd
- X
- X STRUCTURE EnvMsg,MN_SIZE
- X APTR em_env;
- X LABEL em_sizeof
- X
- X ENDC !ODIN_I
- END_OF_FILE
- if test 1282 -ne `wc -c <'odin.i'`; then
- echo shar: \"'odin.i'\" unpacked with wrong size!
- fi
- # end of 'odin.i'
- fi
- if test -f 'odin.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odin.uu'\"
- else
- echo shar: Extracting \"'odin.uu'\" \(5666 characters\)
- sed "s/^X//" >'odin.uu' <<'END_OF_FILE'
- Xbegin 666 odin.library
- XM```#\P`````````$``````````,```-2````%0````\```#D```#Z0```U)P+
- XM"DYU2OP````$```-2(`""0`````>````+````$IO9&EN+FQI8G)A<GD``&]DK
- XM:6XN;&EB<F%R>2`R+C<@*#(@4V5P(#DP*0T*`````&(```!:````Q@```/(`P
- XM``%T```!@@```90```'<```'*````>````=8```%1```!C@```'P```"A@``9
- XM`S8```=N```$=```!+(```3J```&V```!O8```<4```'E```")8```FP```*[
- XM1```"NH```L0```+0O_____@```,"0#````*````'N````X&`-```!0``M``C
- XM`!8`!\```!@````L`````"\-*D`CP`````0K2``B0_D`````<`!.KOW8(\``C
- XM````9@HN/(`#@`=.KO^40>T`*$ZN_=)![0!6((A8D$*H``0A2``(0?D````()
- XM,#P`/R"(6)!"J``$(4@`"$'H``Q1R/_N0?D```,(3J[]TD'Y```#AD*00J@`D
- XM!!#\`#`@#2I?3G4(K@`#`"92;@`@(`Y.=7``4VX`(&8(""X``P`F80).=4CG<
- XM(`8J3BQX``1*;0`@9PH([0`#`"9P`&`H)"T`(B)-3J[_!")Y`````$ZN_F)PL
- XM`")-,"T`$)+`T&T`$DZN_RX@`DS?8`1.=7``3G4C2``((T``#"-*`!`@"4YU8
- XM2.<`)BI.)$DL>``$0>T`*$ZN_<P@2F$`"<9*@&<680`)^B1`0>T`*$ZN_<8@;
- XM"DS?9`!.=4_O_^XO2@`(+VX!%``,'WP``0`1</].KOZV(D\30``00>T`5D'H3
- XM``0@*``$(4D`!"*((T``!"!`((E![0`H3J[]QA(O`!!P``/`3J[^PG``$"\`<
- XM$$ZN_K`@+P`(3^\`$F"82.<`)BI.)$DL>``$0>T`*$ZN_<P@2F$`"3!*@&<LW
- XM($`B2DS?9`!A``EL2.<`!BIY````!"QX``1![0`H*D!.KOW&(`U,WV``3G5/^
- XM[__N+TH`""]N`10`#!]\````$7#_3J[^MB)/$T``$$'M`%9!Z``$("@`!"%)A
- XM``0BB"-```0@0"")0>T`*$ZN_<82+P`0<`'CJ$ZN_L)P`!`O`!!.KOZP("\`T
- XM"$_O`!),WV0`3G5(YP`^*DXD22QX``1![0`H3J[]S")J``AA``A@($DB2D'H:
- XM``0@*``$(4D`!"*((T``!"!`((E'[0!6)E-*DV<``/`@:P`((&@`"")J``BSY
- XMR&<*$!BP&6;B2@!F]B)+*$DF42!1(FD`!"*((4D`!$*4$"P`$0P```%F'BE*L
- XM``@@"F$`"%(2+``0<`'CJ")L``Q.KOZ\8```F@P```!F,$CG`#X@2B)L``A,<
- XM[WP``!1A``@T3-]\`"E```@2+``0<`'CJ")L``Q.KOZ\8`#_<`P```)F)&$`6
- XM"1(O`"`*80`']B!L``PB7R-``!1.KOZ2(DQP$DZN_RY@.$CG`#X@2B)L``A,8
- XM[WP``!1A``?:3-]\`"\`80`(U")`(&P`#"-?`!1.KOZ2(DQP$DZN_RY@`/\.V
- XM0>T`*$ZN_<9,WWP`3G4O"B1)(FH`"$'Z`!1*@F8&3J[_RF`$3J[_T"1?3G4OI
- XM"DAZ``@O*@`43G58CR)`2H!G"BQY````!$[N_[A.=4CG`"8J3B1)+'@`!$'MW
- XM`"A.KOW,($IA``<$2H!G%F$`!S@D0$'M`"A.KOW&(`I,WV0`3G5P`J2.<`(
- XM)BI.)$DL>``$0>T`*$ZN_<P@2F$`!LQ*@&800>T`*$ZN_<9P`$S?9`!.=2!`B
- XM(DI,WV0`80`&^$CG``8L>``$*GD````$0>T`*"I`3J[]QB`-3-]@`$YU2.?`'
- XMPBQX``1!^0```PA.KOW,3-]#`TCY?_\```,X2.<X.B/(```#>"9)*``F`2QX(
- XM``1!^0```!HA0P`43J[_(@B``!]F``":(\````.`)$`D*@`0)&H`&!5\``$`T
- XM"!5$``DE2P`*)4(`.M2#)4(`/E6")4(`-D'J`$H@B%B00J@`!"%(``@1?``*P
- XM``QP_TZN_K83P````S9K/"/N`10```-\,_P``0```X0B2BA*1?D`````E\M.&
- XMKO[F$CD```,V<`'CJ$ZN_L)P`!`Y```#-DZN_K!@#"!Y```#@$ZN_QR9S$'YH
- XM```#"$ZN_<8@#$S?7!Q.=4CGP,(L>``$0?D```,(3J[]S$S?0P-(^7__```#R
- XM.$CG/`(CR````W@H`2H))``L>``$</].KOZV$\````,V:UPC[@$4```#?$)Y%
- XM```#A"8\_____.2++'D`````(@5.KO]V)`!G)`2"````7"QX``02.0```S9P[
- XM``/`3J[^PG``$#D```,V3J[^L$'Y```#"$ZN_<8@`DS?0#Q.=70`8.HO"D_O@
- XM_^@B3W`8E<I.KO_<(D!.KO_$3^\`&"1?3G4O"D_O_^@B3W`8E<I.KO_<(D!.0
- XMKO^F3^\`&"1?3G5P&$ZN_^(B0$J`9P9.KO^X<`%.=2\*2.>`@BQX``0B/``!%
- XM``%.KO\Z(D!*@&<.3-]!`97*3J[_W"1?3G5,WT$!<`!@]"`)9Q`@*0`,+PXL/
- XM>``$3J[_+BQ?3G4O"2!I``@@*0`,3J[_XB)?2H!G$"!)(D!A``22(D!.KO^X'
- XM<`%.=4CG,"8D`"8!*DXD22QX``1![0`H3J[]S"!*80`$'DJ`9Q9A``12)`!!\
- XM[0`H3J[]QB`"3-]D#$YU3^__[B]*``@O;@$4``P??``!`!%P_TZN_K8?0``0Y
- XM(D]![0!60>@`!"`H``0A20`$(H@C0``$($`@B4'M`"A.KOW&80`$+B1)L_P`Z
- XM````9W`E0@`@)4,`)#5\``D`'$ZN_C(2+P`0<``#P"0`(&H`#A(H``\#P$ZNT
- XM_L+`@F8F0J\`"$'M`"A.KOW,2I=G#B)/(%$B:0`$(H@A20`$0>T`*$ZN_<8BX
- XM2F$`!"YP`!`O`!!.KOZP("\`"$_O`!)@`/\\+WS_____``A@N$CG,"8D`"8!?
- XM*DXD22QX``1![0`H3J[]S"!*80`#'$J`9RP@0")*3-]D#&$``UA(YP`&*GD`J
- XM```$+'@`!"I`0>T`*$ZN_<8@#4S?8`!.=4_O_^XO2@`(+VX!%``,'WP````1\
- XM</].KOZV'T``$")/0>T`5D'H``0@*``$(4D`!"*((T``!"!`((E![0`H3J[]3
- XMQF$``Q8D2;/\`````&=R)4(`("5#`"0U?``)`!Q.KOXR$B\`$'```\`D`"!J\
- XM``X2*``/`\!.KO["P()F)D*O``A![0`H3J[]S")/2I%G#"!1(FD`!"*((4D`+
- XM!$'M`"A.KOW&(DIA``,6<``0+P`03J[^L"`O``A/[P`23-]D#$YU+WS_____4
- XM``A@MDCG`#XJ3B9()$DL>``$0>T`*$ZN_<P@2F$``@1*@&<H+P!A``-**$`@P
- XM'V$``BXI0``4($LB3$ZN_I)![0`H3J[]QDS??`!.=7`2(CP``0`!3J[_.B)`*
- XM2H!G*B-*``@C2P`,$WP``@`10>T`5D'H``0@*``$(4D`!"*((T``!"!`((E@1
- XMMB\'+CP``0``3J[_E"X?8*9(YP`^*DXF2"1)+'@`!$'M`"A.KOW,($IA``%PX
- XM2H!G.B\`80`"MBA`(!](YP`^($`B2DSO?```%&$``9Q,WWP`*4``%"!+(DQ.G
- XMKOZ20>T`*$ZN_<9,WWP`3G5P$B(\``$``4ZN_SHB0$J`9RHC2@`((TL`#!-\/
- XM``,`$4'M`%9!Z``$("@`!"%)``0BB"-```0@0"")8+8O!RX\``$``$ZN_Y0N-
- XM'V"F+PI/[__H(D](Y\``<!B5RDZN_]PB0$S?``-.KO^(3^\`&"1?3G4B3R\`P
- XM<!A.KO_B2H!G"B)`(%].KO]\3G5(YP$"+CP``0``+'@`!$ZN_Y1,WT"`6(].O
- XM=4CG`((L>``$+PA!^0```PA.KOW,(%]*&&;\4XA#^0```X80$68$$#P`,%(`+
- XM#```.F8&$OP`06`:#```6V8&$OP`86`.#```>V8&$OP`,$H!#^0```X80U
- XMV6;\0?D```,(3J[]QDS?00`@"$YU<`!R`!(99P30`6#X`D``/\#\``Q#^0``\
- XM``C3P$YU2.<`,"1((FH`"&'6L^D`"&<B(E$@:0`()FH`"+?(9PH0&+`;9@A*8
- XM`&;V(`E@"")12I%FX'``3-\,`$YU(D`@42)I``0BB"%)``1.=4JH`!!F$"`HH
- XM``PB"1+84X!F^B`!3G4O"2\((&@`$$Z04(].=4CG`"(L>``$80``BB1`2H!GX
- XM2G`H(CP``0`!3J[_.DJ`9S8O`")`0?D````,<`%R`$ZN_D1*@&88(E\3?``%S
- XM``@C2@`.,WP`*``23-]$`$YU(E]P*$ZN_RXB2F%HD\E,WT0`3G6S_`````!FX
- XM`DYU+PXL>``$+PE.KOX@(E=.KOX^(E<B:0`.83PB7W`H3J[_+BQ?3G4O"W`BX
- XM(CP``0`!3J[_.B9`2H!G&"=N`10`$'#_3J[^MA=```\B2TZN_IX@"R9?3G4OJ
- XM"4ZN_I@B5W``$"D`#TZN_K`B7W`B3J[_+DYU<!@B/``!``%.KO\Z2H!G"B!`M
- XM,7P`&``23G4O!RX\``$``$ZN_Y0N'TYU```#[````"0`````````!@````H`]
- XM```2````%@```!H```!.````4@```%8```!:````7@```&(```!F````:@``B
- XM`&X```!R````=@```'H```!^````@@```(8```"*````C@```)(```"6````6
- XMF@```)X```"B````I@```*H```"N````L@```+8```"Z````O@```-````#JR
- XM`````@````$```7T```&B`````,````"```!`@``!7@```QF````)`````,`H
- XM``#X```!#@```3@```%6```!8````;H```*V```$J```!2X```5.```%7@```
- XM!6@```6.```%V```!>(```7J```&````!A````8<```&*```!D(```92```&%
- XM7```!G(```9\```&@@``!I````:J```&N@``!L0```C*```+3@``"V````N6E
- XM```+H```"\8````````#\@```^D````5+'@`!$IY```#A&<D(&X!%$'H`$HBG
- XM>0```X!!Z``$("@`!"%)``0BB"-```0@0"")+SD```-X$CD```,V<`'CJ")Y[
- XM```#?$ZN_KQ,^7__```#.$YU```#[`````8````#````!@```!8````R````\
- XM.````$(```!.`````````_(```/J````#V1O<RYL:6)R87)Y`'1I;65R+F1EZ
- XM=FEC90`````````````*`````````@````$```````$``0```%Q.<0```_(`&
- X+``/K````Y````_(`'
- X``
- Xend
- Xsize 4016
- END_OF_FILE
- if test 5666 -ne `wc -c <'odin.uu'`; then
- echo shar: \"'odin.uu'\" unpacked with wrong size!
- fi
- # end of 'odin.uu'
- fi
- if test -f 'odin_lib.fd' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odin_lib.fd'\"
- else
- echo shar: Extracting \"'odin_lib.fd'\" \(921 characters\)
- sed "s/^X//" >'odin_lib.fd' <<'END_OF_FILE'
- X*---- odin_lib.fd
- X*---- version.revision = 2.7
- X##base _OdinBase
- X##bias 30
- X##public
- X*---- basic functions
- XCreateEnvelope(name,size)(A0,D0)
- XInitEnvelope(envelope,name,len,copyfunc)(A1,A0,D0,A2)
- XDisposeEnvelope(envelope)(A1)
- X*---- creation of tasks/processes from procedures
- XStartTask(procedure,name,pri,stacksize)(A0/A1,D0/D1)
- XStartProcess(procedure,name,pri,stacksize)(A0/A1,D0/D1)
- X*---- Linda-like functions
- XIn(envelope)(A1)
- XRd(envelope)(A1)
- XOut(envelope)(A1)
- XCopyOut(envelope)(A1)
- XEval(envelope,pri,stacksize,et)(A1,D0/D1/D2)
- XInp(envelope)(A1)
- XRdp(envelope)(A1)
- X*---- ease-of-use functions
- XAwaitNamedEnvelope(name)(A0)
- XPollNamedEnvelope(name)(A0)
- XOutEmptyEnvelope(name)(A0)
- X*---- version 2 additions
- XTimedIn(env,secs,micros)(A1,D0/D1)
- XTimedRd(env,secs,micros)(A1,D0/D1)
- XAsyncIn(env,port)(A1,A0)
- XAsyncRd(env,port)(A1,A0)
- XAwaitTimed(name,secs,micros)(A0,D0/D1)
- XAsyncRequest(name,port)(A0,D0)
- XUniqueName(buffer)(A0)
- X##end
- END_OF_FILE
- if test 921 -ne `wc -c <'odin_lib.fd'`; then
- echo shar: \"'odin_lib.fd'\" unpacked with wrong size!
- fi
- # end of 'odin_lib.fd'
- fi
- if test -f 'odindemo1.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odindemo1.c'\"
- else
- echo shar: Extracting \"'odindemo1.c'\" \(3331 characters\)
- sed "s/^X//" >'odindemo1.c' <<'END_OF_FILE'
- X/***********************************************/
- X/* odindemo1.c */
- X/* demo of odin.library */
- X/* starts 2 new processes and sends envelopes */
- X/* back and forth. */
- X/* Created 7-Jul-90 by Peter Oerbaek */
- X/* This code is in the public domain. */
- X/* Link with odinglue.o */
- X/***********************************************/
- X
- X/**********************************************************************
- X A lot of checking is ommited in the code to make it smaller and
- X easier to read.
- X**********************************************************************/
- X
- X#include "exec/types.h"
- X#include "exec/semaphores.h"
- X#include "stdio.h"
- X#include "odin.h"
- X
- Xstruct OdinBase *OpenLibrary();
- Xstruct OdinBase *OdinBase; /* global base pointer */
- X
- Xtypedef struct {
- X Envelope env; /* envelope-prefix used by odin routines */
- X int num; /* package number */
- X int stop; /* flag to stop consumers */
- X} Pack;
- X
- X#define p_sizeof (long)sizeof(Pack)
- X
- Xtypedef struct {
- X Envelope e; /* envelope-prefix */
- X char *windowname; /* name of windowfile to open */
- X} StartEnv;
- X
- X#define se_sizeof (long)sizeof(StartEnv)
- X
- X/*** for use around C routines that are not re-entrant ***/
- X
- Xstruct SignalSemaphore ss;
- X#define CRIT_REG(s) ObtainSemaphore(&ss); { s } ReleaseSemaphore(&ss);
- X
- X/**** the body for the processes ************/
- X
- XEnvelope *processbody(se)
- XStartEnv *se;
- X{
- X FILE *f;
- X int i,stop;
- X Pack *p;
- X
- X CRIT_REG(f = fopen(se->windowname,"w");)
- X CRIT_REG(fprintf(f,"Hello world\n");)
- X do {
- X p = (Pack *)AwaitNamedEnvelope("a packet");
- X stop = p->stop;
- X CRIT_REG(fprintf(f,"Packet #%d received.\n",p->num);)
- X DisposeEnvelope(p);
- X } while(stop == 0);
- X CRIT_REG(fprintf(f,"Bye, bye...\n");)
- X Delay(100L);
- X CRIT_REG(fclose(f);)
- X return (Envelope *)se;
- X}
- X
- Xmain()
- X{
- X StartEnv *env;
- X Pack *pack;
- X int i;
- X
- X printf("opening library\n");
- X if(!(OdinBase = OpenLibrary("ram:odin.library",0L))) {
- X printf("Couldn't open odin.library\n");
- X exit(20);
- X }
- X
- X /* set up semaphore */
- X InitSemaphore(&ss);
- X
- X /* Ought to do an AddSemaphore() here, but that doesn't work
- X * in my ROM (KS 33.180)
- X */
- X
- X printf("creating new processes\n");
- X /* start first process */
- X env = (StartEnv *)CreateEnvelope("newprocess1",se_sizeof);
- X env->e.e_proc = processbody;
- X env->windowname = "CON:10/10/300/100/Proc1";
- X Eval(env,1L,4000L,EVAL_PROCESS);
- X
- X /* start next process */
- X env = (StartEnv *)CreateEnvelope("newprocess2",se_sizeof);
- X env->e.e_proc = processbody;
- X env->windowname = "CON:310/20/300/100/Proc2";
- X Eval(env,0L,4000L,EVAL_PROCESS);
- X
- X /* send some packages */
- X for(i = 0; i < 10; i++) {
- X pack = (Pack *)CreateEnvelope("a packet",p_sizeof);
- X pack->num = i;
- X pack->stop = 0;
- X Out(pack);
- X CRIT_REG(printf("packet #%d sent.\n",i);)
- X }
- X
- X /* send the stop-packages */
- X CRIT_REG(printf("sending stop-packets.\n");)
- X pack = (Pack *)CreateEnvelope("a packet",p_sizeof);
- X pack->stop = 1;
- X Out(pack);
- X
- X pack = (Pack *)CreateEnvelope("a packet",p_sizeof);
- X pack->stop = 1;
- X Out(pack);
- X
- X CRIT_REG(printf("waiting for process1 to terminate\n");)
- X DisposeEnvelope(AwaitNamedEnvelope("newprocess1"));
- X CRIT_REG(printf("waiting for process2 to terminate\n");)
- X DisposeEnvelope(AwaitNamedEnvelope("newprocess2"));
- X
- X printf("closing\n");
- X CloseLibrary(OdinBase);
- X}
- X
- END_OF_FILE
- if test 3331 -ne `wc -c <'odindemo1.c'`; then
- echo shar: \"'odindemo1.c'\" unpacked with wrong size!
- fi
- # end of 'odindemo1.c'
- fi
- if test -f 'odinglue.asm' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odinglue.asm'\"
- else
- echo shar: Extracting \"'odinglue.asm'\" \(4169 characters\)
- sed "s/^X//" >'odinglue.asm' <<'END_OF_FILE'
- X;odinglue.asm
- X;Created 4-Jul-90 by Peter Oerbaek
- X;Last updated 2-Sep-90 by Peter Oerbaek
- X;This is in the public domain.
- X;C-interface gluecode for odin.library V2.7
- X;Assemble with 'as' for Aztec-C 3.40a or later
- X;Assemble with Assem/A68K for Lattice / DICE / PDC
- X;Assembles OK as is with A68K 2.6!!!!
- X
- X;public macro ;de-comment this for use with Assem
- X; XDEF \1
- X; endm
- X
- X__CreateEnvelope equ -30
- X__InitEnvelope equ -36
- X__DisposeEnvelope equ -42
- X__StartTask equ -48
- X__StartProcess equ -54
- X__In equ -60
- X__Rd equ -66
- X__Out equ -72
- X__CopyOut equ -78
- X__Eval equ -84
- X__Inp equ -90
- X__Rdp equ -96
- X__AwaitNamedEnvelope equ -102
- X__PollNamedEnvelope equ -108
- X__OutEmptyEnvelope equ -114
- X
- X;--- Version 2 additions
- X__TimedIn equ -120
- X__TimedRd equ -126
- X__AsyncIn equ -132
- X__AsyncRd equ -138
- X__AwaitTimed equ -144
- X__AsyncRequest equ -150
- X__UniqueName equ -156
- X
- X public _OdinBase ;for use with Manx 'as'
- X; XREF _OdinBase ;for use with Assem
- X
- X_InitEnvelope:
- X movem.l a2/a6,-(sp) ;a6,a2,pc,env,name,len,copyfunc
- X move.l 12(sp),a1
- X move.l 16(sp),a0
- X move.l 20(sp),d0
- X move.l 24(sp),a2
- X move.l _OdinBase,a6
- X jsr __InitEnvelope(a6)
- X movem.l (sp)+,a2/a6
- X rts
- X public _InitEnvelope
- X
- X_In:
- X moveq.l #__In,d1
- X bra.s simplecall
- X public _In
- X
- X_Out:
- X moveq.l #__Out,d1
- X bra.s simplecall
- X public _Out
- X
- X_CopyOut:
- X moveq.l #__CopyOut,d1
- X; bra.s simplecall
- X public _CopyOut
- X
- Xsimplecall: ;call with only parameter in A1
- X move.l a6,-(sp) ;a6,pc,env
- X move.l 8(sp),a1
- X move.l _OdinBase,a6
- X jsr 0(a6,d1.l)
- X move.l (sp)+,a6
- X rts
- X
- X_Rd:
- X moveq.l #__Rd,d1
- X bra.s simplecall
- X public _Rd
- X
- X
- X_Inp:
- X moveq.l #__Inp,d1
- X bra.s simplecall
- X public _Inp
- X
- X_Rdp:
- X moveq.l #__Rdp,d1
- X bra.s simplecall
- X public _Rdp
- X
- X_Eval:
- X movem.l d2/a6,-(sp) ;a6,d2,pc,a1,d0,d1,d2
- X move.l 12(sp),a1
- X movem.l 16(sp),d0-d2
- X move.l _OdinBase,a6
- X jsr __Eval(a6)
- X movem.l (sp)+,d2/a6
- X rts
- X public _Eval
- X
- X_StartTask:
- X move.l a6,-(sp) ;a6,pc,proc,name,pri,stack
- X movem.l 8(sp),a0/a1
- X movem.l 16(sp),d0/d1
- X move.l _OdinBase,a6
- X jsr __StartTask(a6)
- X move.l (sp)+,a6
- X rts
- X public _StartTask
- X
- X_StartProcess:
- X move.l a6,-(sp)
- X movem.l 8(sp),a0/a1
- X movem.l 16(sp),d0/d1
- X move.l _OdinBase,a6
- X jsr __StartProcess(a6)
- X move.l (sp)+,a6
- X rts
- X public _StartProcess
- X
- X_AwaitNamedEnvelope:
- X move.l a6,-(sp)
- X move.l 8(sp),a0
- X move.l _OdinBase,a6
- X jsr __AwaitNamedEnvelope(a6)
- X move.l (sp)+,a6
- X rts
- X public _AwaitNamedEnvelope
- X
- X_PollNamedEnvelope:
- X move.l a6,-(sp)
- X move.l 8(sp),a0
- X move.l _OdinBase,a6
- X jsr __PollNamedEnvelope(a6)
- X move.l (sp)+,a6
- X rts
- X public _PollNamedEnvelope
- X
- X_OutEmptyEnvelope:
- X move.l a6,-(sp)
- X move.l 8(sp),a0
- X move.l _OdinBase,a6
- X jsr __OutEmptyEnvelope(a6)
- X move.l (sp)+,a6
- X rts
- X public _OutEmptyEnvelope
- X
- X_CreateEnvelope:
- X move.l a6,-(sp) ;a6,pc,name,size
- X move.l 8(sp),a0
- X move.l 12(sp),d0
- X move.l _OdinBase,a6
- X jsr __CreateEnvelope(a6)
- X move.l (sp)+,a6
- X rts
- X public _CreateEnvelope
- X
- X_DisposeEnvelope:
- X move.l a6,-(sp)
- X move.l 8(sp),a1
- X move.l _OdinBase,a6
- X jsr __DisposeEnvelope(a6)
- X move.l (sp)+,a6
- X rts
- X public _DisposeEnvelope
- X
- X;--- version 2 additions
- X
- X_TimedIn:
- X move.l a6,-(sp) ;a6,pc,env,secs,micros
- X move.l 8(sp),a1
- X movem.l 12(sp),d0-d1
- X move.l _OdinBase,a6
- X jsr __TimedIn(a6)
- X move.l (sp)+,a6
- X rts
- X public _TimedIn
- X
- X_TimedRd:
- X move.l a6,-(sp) ;a6,pc,env,secs,micros
- X move.l 8(sp),a1
- X movem.l 12(sp),d0-d1
- X move.l _OdinBase,a6
- X jsr __TimedRd(a6)
- X move.l (sp)+,a6
- X rts
- X public _TimedRd
- X
- X_AsyncIn:
- X move.l a6,-(sp) ;a6,pc,env,port
- X move.l 8(sp),a1
- X move.l 12(sp),a0
- X move.l _OdinBase,a6
- X jsr __AsyncIn(a6)
- X move.l (sp)+,a6
- X rts
- X public _AsyncIn
- X
- X_AsyncRd:
- X move.l a6,-(sp) ;a6,pc,env,port
- X move.l 8(sp),a1
- X move.l 12(sp),a0
- X move.l _OdinBase,a6
- X jsr __AsyncRd(a6)
- X move.l (sp)+,a6
- X rts
- X public _AsyncRd
- X
- X_AwaitTimed:
- X move.l a6,-(sp) ;a6,pc,name,secs,micros
- X move.l 8(sp),a0
- X movem.l 12(sp),d0/d1
- X move.l _OdinBase,a6
- X jsr __AwaitTimed(a6)
- X move.l (sp)+,a6
- X rts
- X public _AwaitTimed
- X
- X_AsyncRequest:
- X move.l a6,-(sp) ;a6,pc,name,port
- X move.l 8(sp),a0
- X move.l 12(sp),d0
- X move.l _OdinBase,a6
- X jsr __AsyncRequest(a6)
- X move.l (sp)+,a6
- X rts
- X public _AsyncRequest
- X
- X_UniqueName:
- X move.l a6,-(sp) ;a6,pc,buffer
- X move.l 8(sp),a0
- X move.l _OdinBase,a6
- X jsr __UniqueName(a6)
- X move.l (sp)+,a6
- X rts
- X public _UniqueName
- X
- X end
- X
- END_OF_FILE
- if test 4169 -ne `wc -c <'odinglue.asm'`; then
- echo shar: \"'odinglue.asm'\" unpacked with wrong size!
- fi
- # end of 'odinglue.asm'
- fi
- if test -f 'odintest.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'odintest.c'\"
- else
- echo shar: Extracting \"'odintest.c'\" \(6800 characters\)
- sed "s/^X//" >'odintest.c' <<'END_OF_FILE'
- X/***********************************************************
- X* odintest.c *
- X* Created 12-Jul-90 by Peter Oerbaek *
- X* This is supposed to be a complete test-suite of the *
- X* functions in odin.library *
- X* Modified 13-Jul-90 for ANSI compatibility *
- X* Modified 23-Aug-90 for testing of version 2 *
- X************************************************************/
- X
- X#include "exec/types.h"
- X#include "exec/tasks.h"
- X#include "exec/semaphores.h"
- X#include "exec/execbase.h"
- X#include "odin.h"
- X#include "stdio.h"
- X
- Xvoid *OpenLibrary();
- Xstruct Task *FindTask();
- Xstruct Message *GetMsg();
- Xvoid WaitPort(),FreeMem(),DeletePort();
- Xstruct MsgPort *CreatePort();
- X
- Xstruct OdinBase *OdinBase;
- Xstruct SignalSemaphore ss;
- X#define CR(s) ObtainSemaphore(&ss); { s } ReleaseSemaphore(&ss);
- X#define debug(str) CR(printf(str);)
- X
- XEnvelope e1,e2,e3,e4;
- X
- Xstruct MsgPort *mp;
- Xstruct EnvMsg *msg;
- X
- XEnvelope *my_copyfunc(src,tar)
- XEnvelope *src,*tar;
- X{
- X int i;
- X register char *a,*b;
- X
- X a = (char *)src; b = (char *)tar;
- X for(i = 0; i < e_sizeof; i++) {
- X *a++ = *b++;
- X }
- X
- X return tar;
- X}
- X
- XEnvelope *process1(e)
- XEnvelope *e;
- X{
- X struct Task *tsk;
- X Envelope *env;
- X
- X debug("process1 started\n");
- X CR(printf("lenght = %ld\n",e->e_len);)
- X
- X tsk = FindTask(NULL);
- X
- X CR(printf("stacksize = %d\n",(int)(tsk->tc_SPUpper - tsk->tc_SPLower));)
- X CR(printf("pri = %d\n",(int)tsk->tc_Node.ln_Pri);)
- X CR(printf("taskname=%s\n",tsk->tc_Node.ln_Name);)
- X
- X debug("creating envelope\n");
- X env = CreateEnvelope("Env2",e_sizeof);
- X if(env == NULL) { debug("create returned NULL\n"); return e; }
- X
- X debug("envelope created\n");
- X
- X Delay(100L);
- X debug("copyouting\n");
- X CopyOut(env);
- X
- X Delay(199L);
- X debug("copy outing with copyfunc\n");
- X env->e_copyfunc = my_copyfunc;
- X CopyOut(env);
- X
- X debug("normal out\n");
- X Out(env);
- X
- X debug("wait for V3\n");
- X while(!(env = PollNamedEnvelope("V3"))) {
- X debug("waiting with poll.\n");
- X }
- X
- X debug("got V3 dispose\n");
- X DisposeEnvelope(env);
- X
- X debug("wait for V4 and dispose\n");
- X DisposeEnvelope(AwaitNamedEnvelope("V4"));
- X
- X debug("wait for task1\n");
- X DisposeEnvelope(AwaitNamedEnvelope("V5"));
- X debug("shake hands\n");
- X (void)OutEmptyEnvelope("R1");
- X
- X (void)OutEmptyEnvelope("envelope3");
- X
- X Delay(200L);
- X (void)OutEmptyEnvelope("envelope4");
- X debug("2 envelopes outed\n");
- X
- X (void)OutEmptyEnvelope("te1");
- X Delay(300L);
- X (void)OutEmptyEnvelope("te2");
- X
- X debug("te1 and te2 outed\n");
- X
- X (void)AwaitTimed("never",10L,0L);
- X debug("awaittaimed timed out after 10 secs\n");
- X
- X return e;
- X}
- X
- Xvoid task1()
- X{
- X (void)OutEmptyEnvelope("V5"); /* shake hands with process */
- X DisposeEnvelope(AwaitNamedEnvelope("R1"));
- X}
- X
- Xmain()
- X{
- X Envelope *ptr;
- X struct Task *tsk;
- X char buffer[30];
- X int i;
- X
- X if(!(OdinBase = (struct OdinBase *)OpenLibrary("RAM:odin.library",0L)))
- X {
- X printf("couldn't find odin.library.\n");
- X exit(20);
- X }
- X
- X mp = CreatePort("testport",0L);
- X
- X InitSemaphore(&ss);
- X
- X debug("begin\n");
- X
- X debug("test InitEnvelope():\n");
- X ptr = InitEnvelope(&e1,"Test",e_sizeof,NoCopyFunc);
- X debug("init envelope finished\n");
- X if(ptr == &e1) {
- X debug("returnvalue ok.\n");
- X if(strcmp(ptr->e_name,"Test") == 0) {
- X debug("name inited ok\n");
- X } else {
- X debug("name wrong\n");
- X }
- X if(ptr->e_len == e_sizeof && ptr->e_copyfunc == NULL) {
- X debug("inited ok\n");
- X } else {
- X debug("wrong init\n");
- X }
- X } else {
- X debug("returned wrong value.\n");
- X }
- X
- X
- X debug("test Eval():\n");
- X e1.e_proc = process1;
- X (void)Eval(&e1,(long)0,(ULONG)8000,EVAL_PROCESS);
- X debug("eval finished\n");
- X
- X debug("test rdp\n");
- X (void)InitEnvelope(&e2,"Env2",e_sizeof,NoCopyFunc);
- X while(!(ptr = Rdp(&e2))) { debug("waiting in rdp\n"); }
- X if(ptr == &e2) {
- X debug("rdp returned ok\n");
- X } else {
- X debug("rdp returned wrong\n");
- X }
- X CR(printf("name returned by rdp: %s\n",e2.e_name);)
- X
- X debug("test rd\n");
- X (void)InitEnvelope(&e2,"Env2",e_sizeof,NoCopyFunc);
- X ptr = Rd(&e2);
- X if(ptr == &e2) {
- X debug("rd returned ok\n");
- X } else {
- X debug("rd returned wrong\n");
- X }
- X CR(printf("name returned by rd: %s\n",ptr->e_name);)
- X
- X debug("test In()\n");
- X (void)InitEnvelope(&e2,"Env2",e_sizeof,NoCopyFunc);
- X ptr = In(&e2);
- X if(ptr != &e2) {
- X debug("in returned ok\n");
- X } else {
- X debug("in returned wrong\n");
- X }
- X CR(printf("name returned by in: %s\n",ptr->e_name);)
- X DisposeEnvelope(ptr);
- X
- X debug("test AwaitNamedEnvelope()\n");
- X ptr = AwaitNamedEnvelope("Env2");
- X CR(printf("name returned by Await..: %s\n",ptr->e_name);)
- X DisposeEnvelope(ptr);
- X
- X debug("test rdp with copyfunc\n");
- X (void)InitEnvelope(&e2,"Env2",e_sizeof,NoCopyFunc);
- X while(!(ptr = Rdp(&e2))) { debug("waiting in rdp2\n"); }
- X if(ptr == &e2) {
- X debug("rdp2 returned ok\n");
- X } else {
- X debug("rdp2 returned wrong\n");
- X }
- X CR(printf("name returned by rdp2: %s\n",e2.e_name);)
- X
- X debug("rd with copyfunc\n");
- X (void)InitEnvelope(&e2,"Env2",e_sizeof,NoCopyFunc);
- X ptr = Rd(&e2);
- X if(ptr == &e2) {
- X debug("rd2 returned ok\n");
- X } else {
- X debug("rd2 returned wrong\n");
- X }
- X CR(printf("name returned by rd2: %s\n",e2.e_name);)
- X
- X DisposeEnvelope(AwaitNamedEnvelope("Env2"));
- X
- X Delay(100L);
- X Out(CreateEnvelope("V3",e_sizeof));
- X
- X (void)OutEmptyEnvelope("V4");
- X
- X tsk = StartTask(task1,"Task1",0L,4000L);
- X if(tsk == NULL) { debug("couldn't start task\n"); }
- X debug("task started\n");
- X
- X /*** version 2 additions ***/
- X
- X (void)InitEnvelope(&e3,"envelope3",e_sizeof,NoCopyFunc);
- X
- X /* wait max 5 secs */
- X ptr = TimedRd(&e3,5L,0L);
- X if(ptr == &e3) {
- X debug("timedrd returned ok\n");
- X CR(printf("name returned by TimedRd: %s\n",ptr->e_name);)
- X } else {
- X debug("timedrd timed out\n");
- X }
- X
- X debug("ready for timedin\n");
- X ptr = TimedIn(&e3,3L,0L);
- X if(ptr != 0L) {
- X debug("timedin returned ok\n");
- X CR(printf("name returned by TimedIn: %s\n",ptr->e_name);)
- X DisposeEnvelope(ptr);
- X } else {
- X debug("timedin timed out\n");
- X }
- X
- X (void)InitEnvelope(&e4,"envelope4",e_sizeof,NoCopyFunc);
- X AsyncIn(&e4,mp);
- X
- X debug("returned from asyncin, waiting\n");
- X
- X WaitPort(mp);
- X msg = (struct EnvMsg *)GetMsg(mp);
- X debug("got message\n");
- X DisposeEnvelope(msg->em_env);
- X debug("disposed of envelope\n");
- X FreeMem(msg,(long)sizeof(struct EnvMsg));
- X debug("freed message\n");
- X
- X ptr = AwaitTimed("te1",1L,0L);
- X if(ptr != 0L) {
- X debug("te1 arrived\n");
- X DisposeEnvelope(ptr);
- X } else {
- X debug("te1 didn't arrive in time\n");
- X }
- X
- X AsyncRequest("te2",mp);
- X debug("waiting for te2\n");
- X
- X WaitPort(mp); msg = (struct EnvMsg *)GetMsg(mp);
- X DisposeEnvelope(msg->em_env); FreeMem(msg,(long)sizeof(struct EnvMsg));
- X
- X /* generate some unique names */
- X for(i = 1; i < 200; i++) {
- X (void)strcpy(buffer,"prefix");
- X CR(printf("%s\n",UniqueName(buffer));)
- X }
- X
- X debug("wait for process to die\n");
- X (void)AwaitNamedEnvelope("Test");
- X debug("exiting\n");
- X
- X DeletePort(mp);
- X CloseLibrary(OdinBase);
- X}
- X
- END_OF_FILE
- if test 6800 -ne `wc -c <'odintest.c'`; then
- echo shar: \"'odintest.c'\" unpacked with wrong size!
- fi
- # end of 'odintest.c'
- fi
- if test -f 'philosophers.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'philosophers.c'\"
- else
- echo shar: Extracting \"'philosophers.c'\" \(3995 characters\)
- sed "s/^X//" >'philosophers.c' <<'END_OF_FILE'
- X/*****************************************************************/
- X/* philosophers.c */
- X/* demo of some of the features of odin.library 2.5 */
- X/* Created 6-Jun-90 */
- X/* Last modified 27-Aug-90 */
- X/* Link with odinglue.o */
- X/*****************************************************************/
- X
- X#include "exec/types.h"
- X#include "exec/semaphores.h"
- X#include "stdio.h"
- X#include "odin.h"
- X
- Xstruct Library *OpenLibrary();
- X
- X#define PHILONUM 4 /* number of philosophers */
- X
- Xstruct OdinBase *OdinBase; /* the global baseptr */
- X
- X/* structure of allocation-envelope */
- Xstruct Forks {
- X Envelope e;
- X BOOL inuse[PHILONUM];
- X};
- X
- X/* argument for the philosopher processes */
- Xstruct PEnv {
- X Envelope e;
- X int num;
- X};
- X
- Xstruct Forks *the_forks;
- Xstruct SignalSemaphore xx;
- X
- X/* protect C-functions that are not re-entrant */
- X#define CR(s) ObtainSemaphore(&xx); { s } ReleaseSemaphore(&xx);
- X#define USE(n) (copy_forks->inuse[n])?printf("%d ",n):printf(" ")
- X
- Xchar s[PHILONUM][20]; /* holds the names */
- X
- X/* make name with single-digit suffix */
- Xchar *philoname(str,name,num)
- Xchar *str,*name;
- Xint num;
- X{
- X register char *s2;
- X
- X s2 = str;
- X while(*name) *s2++ = *name++;
- X *s2++ = num + '0';
- X *s2 = 0;
- X return str;
- X}
- X
- X/* the body of the new processes, must be re-entrant */
- Xstruct PEnv *philosopher(env)
- Xstruct PEnv *env;
- X{
- X int i,me;
- X struct Forks *f;
- X FILE *win;
- X
- X me = env->num;
- X
- X /* open monitorwindow */
- X switch(me) {
- X case 0: CR(win = fopen("CON:10/10/200/80/Philo0","w");)
- X break;
- X case 1: CR(win = fopen("CON:220/10/200/80/Philo1","w");)
- X break;
- X case 2: CR(win = fopen("CON:10/115/200/80/Philo2","w");)
- X break;
- X case 3: CR(win = fopen("CON:220/115/200/80/Philo3","w");)
- X break;
- X default:
- X break;
- X }
- X
- X /* let each philosopher eat 20 times */
- X for(i = 0; i < 20; i++) {
- X f = (struct Forks *)AwaitNamedEnvelope("Forkalloc");
- X while (f->inuse[me] || f->inuse[(me+1) % PHILONUM]) {
- X Out(f);
- X f = (struct Forks *)AwaitNamedEnvelope("Forkalloc");
- X }
- X
- X /* no one used the forks, now sit on them */
- X f->inuse[me] = TRUE;
- X f->inuse[(me+1) % PHILONUM] = TRUE;
- X
- X /* allow others to look at me eating */
- X Out(f);
- X
- X /* eat */
- X CR(fprintf(win,"philosopher #%d eating\n",me);)
- X
- X /* release the forks */
- X f = (struct Forks *)AwaitNamedEnvelope("Forkalloc");
- X f->inuse[me] = FALSE;
- X f->inuse[(me+1) % PHILONUM] = FALSE;
- X Out(f);
- X }
- X CR(fclose(win);)
- X return(env);
- X}
- X
- Xmain()
- X{
- X int i;
- X struct PEnv *env;
- X struct Forks *copy_forks;
- X
- X /* set up semaphore to protect C library routines that are */
- X /* not re-entrant */
- X
- X InitSemaphore(&xx);
- X
- X /* open odin.library */
- X OdinBase = (struct OdinBase *)OpenLibrary("RAM:odin.library",0L);
- X if(OdinBase == NULL) {
- X printf("Error: Couldn't open odin.library\n");
- X exit(10);
- X }
- X
- X /* now create a few philosopher-processes */
- X for(i = 0; i < PHILONUM; i++) {
- X env = (struct PEnv *)CreateEnvelope(
- X philoname(&s[i][0],"phil#",i),
- X (ULONG)sizeof(struct PEnv));
- X env->e.e_proc = philosopher;
- X env->num = i;
- X (void)Eval(env,0L,8000L,EVAL_PROCESS);
- X }
- X
- X /* init the allocation envelope */
- X the_forks = (struct Forks *)CreateEnvelope("Forkalloc",
- X (ULONG)sizeof(struct Forks));
- X
- X for(i = 0; i < PHILONUM; i++) the_forks->inuse[i] = FALSE;
- X
- X Out(the_forks);
- X
- X copy_forks = (struct Forks *)CreateEnvelope("Forkalloc",
- X (ULONG)sizeof(struct Forks));
- X while((env = (struct PEnv *)PollNamedEnvelope(&s[0][0])) == NULL) {
- X Rd(copy_forks);
- X CR( printf("Forks in use: ");
- X USE(0);
- X USE(1);
- X USE(2);
- X USE(3);
- X printf("\n");
- X )
- X }
- X
- X DisposeEnvelope(copy_forks);
- X DisposeEnvelope(env);
- X
- X /* now wait for other philosophers to die */
- X for(i = 1; i < PHILONUM; i++) {
- X DisposeEnvelope(AwaitNamedEnvelope(&s[i][0]));
- X }
- X
- X /* get rid of allocation-envelope, wait at most 10 secs */
- X DisposeEnvelope(AwaitTimed("Forkalloc",10L,0L));
- X CloseLibrary(OdinBase);
- X}
- END_OF_FILE
- if test 3995 -ne `wc -c <'philosophers.c'`; then
- echo shar: \"'philosophers.c'\" unpacked with wrong size!
- fi
- # end of 'philosophers.c'
- fi
- if test -f 'readme.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'readme.uu'\"
- else
- echo shar: Extracting \"'readme.uu'\" \(4849 characters\)
- sed "s/^X//" >'readme.uu' <<'END_OF_FILE'
- Xbegin 666 readme
- XM4D5!1$U%(&9O<B!O9&EN+FQI8G)A<GD@5C(N-RP@.2U397`M.3`L(%)E;&5AT
- XM<V4@,@H*05542$]2.B!0971E<B#8<F+F:RX*0T]065))1TA4.B!0971E<B#8+
- XM<F+F:R`Q.3DP+"!!;&P@<FEG:'1S(')E<V5R=F5D+@H*55!$051%(&9O<B!2,
- XM96QE87-E(#(N"@H@("!!(&9E=R!B=6=S(&EN(%)E;&5A<V4@,2!H87,@8F5EH
- XM;B!F:7AE9"P@86YD('-E=F5N(&YE=R!F=6YC=&EO;G,@87)E(&%D9&5D"G1O8
- XM('-U<'!O<G0@=V%I=&EN9R!F;W(@96YV96QO<&5S('=I=&@@82!T:6UE;W5TL
- XM+"!A;F0@9F]R('!U='1I;F<@96YV96QO<&5S"G1O(&UE<W-A9V4M<&]R=',N'
- XM"B`@(%1W;R!F=6YC=&EO;G,@*&YA;65L>2!#;W!Y3W5T*"D@86YD($]U=$5M,
- XM<'1Y16YV96QO<&4H*2D@:&%V92!C:&%N9V5D"G)E='5R;G1Y<&4L('-O(&ET:
- XM)W,@;F]W('!O<W-I8FQE('1O(&-H96-K(&9O<B!M96UO<GD@86QL;V-A=&EOH
- XM;B!F86EL=7)E+@H*("`@5&AE(&5X86UP;&5S(&AA=F4@8F5E;B!E>'1E;F1E#
- XM9"!W:71H('!H:6QO<V]P:&5R<RYC+"!T:&4@9F%M;W5S(&1I;FEN9PIP:&EL9
- XM;W-O<&AE<G,@<')O9W)A;2!S=6=G97-T960@8GD@1&EJ:W-T<F$L(&%N9"!WC
- XM:71H(&1R87<N8R!A('!R;V=R86T*=&AA="!D>6YA;6EC86QL>2!C86X@8W)E;
- XM871E(&]R(&1E<W1R;WD@=&%S:W,@9F]R(&AA;F1L:6YG($E$0TU0(&UE<W-A]
- XM9V5S"F%N9"!D<F%W:6YG(&=R87!H:6-S(&EN(&UU;'1I<&QE('=I;F1O=W,N5
- XM"@H@("!5;F9O<G1U;F%T96QY(&UY(&5X86UP;&5S('=O;B=T(&-O;7!I;&4@Q
- XM(F%S(&ES(B!W:71H(%!$0S,N,S,@86YY;6]R92P*9'5E('1O('1H92!D:69F:
- XM:6-U;'1Y(&]F(')U;FYI;F<@4$1#(&EN(&]N;'D@,2!-0BP@87,@=V5L;"!AU
- XM<R!O=&AE<B!P<F]B;&5M<PIW:71H('1H:7,@8V]M<&EL97(N(%1H92!G;'5E.
- XM8V]D92!S:&]U;&0@<W1I;&P@=V]R:R!W:71H(%!$0R!A;F0@3&%T=&EC92P*W
- XM=&AO=6=H+@H*("`@1FEN86QL>2P@22!W;W5L9"!L:6ME('1O('1H86YK('1H:
- XM92!C<F5A=&]R<R!O9B!T:&4@9F]L;&]W:6YG('!R;V=R86US"G=I=&AO=70@X
- XM=VAI8V@@=&AI<R!L:6)R87)Y('=O=6QD(&YO="!E>&ES=#H*"B`@($=/348L,
- XM($UE=&%38V]P92`H5&AE($1E8G5G9V5R*2!A;F0@038X2PH*+2TM+2TM+2TM.
- XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TMI
- XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0I214%$344@9F]R(&]D:6XN;&EB<F%RQ
- XM>2!6,2XQ,2P@,3,M2G5L+3DP+"!296QE87-E(#$*"B`@($]D:6XN;&EB<F%R4
- XM>2!P<F]V:61E<R!Y970@86YO=&AE<B!W87D@;V8@:6YT97)P<F]C97-S+6-ON
- XM;6UU;FEC871I;VX@86YD"FUU;'1I=&%S:VEN9R!S=7!P;W)T(&9O<B!T:&4@"
- XM06UI9V$N(%1H92!F=6YC=&EO;G,@87)E(&EN<W!I<F5D(&)Y($QI;F1A+`IAW
- XM;B!A9&0M;VX@;&%N9W5A9V4@9F]R($,@86YD(&]T:&5R(&QA;F=U86=E<RP@G
- XM=VAI8V@@<')O=FED97,@82!S:6UP;&4*86YD('!O=V5R9G5L('-U<'!O<G0@X
- XM9F]R($E00RX*"B`@($]D:6XN;&EB<F%R>2!I<R!&<F5E5V%R92X@5&AA="!IG
- XM<RP@<&5R;6ES<VEO;B!I<R!G<F%N=&5D('1O(&9R965L>0ID:7-T<FEB=71E\
- XM(&%N9"!C;W!Y(&ET+"!P=70@:70@;VX@1FES:$1I<VMS(&%N9"!O=&AE<B!0W
- XM1"!D:7-K<RX*3F\@8VAA<F=E(&QA<F=E<B!T:&%N(%53("0V+C`P(&UU<W0@"
- XM8F4@=&%K96X@9F]R('1H:7,@<&EE8V4@;V8@<V]T=V%R92X*66]U(&-A;B!A!
- XM;'-O(&QE9V%L;'D@:6YC;'5D92!I="!W:71H(&-O;6UE<F-I86P@<V]F='=AE
- XM<F4L(&%S(&QO;F<@87,@=&AI<R`*;F]T:6-E(&ES(&EN8VQU9&5D(&%L;VYG4
- XM('=I=&@@:70N"@HM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM5
- XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM"@I#Y
- XM3TY414Y44R!O9B!296QE87-E(#(Z"@IO9&EN+FQI8G)A<GD@("!4:&4@06UIF
- XM9V%$;W,@;&EB<F%R>2!B:6YA<GDN(%!U="!T:&ES(&EN('EO=7(@3$E"4SH*[
- XM("`@("`@("`@("`@("`@9&ER96-T;W)Y+@H*;V1I;BYD;V,@("`@("`@1&]C[
- XM=6UE;G1A=&EO;B!A;F0@9G5N8W1I;VX@9&5S8W)I<'1I;VXN"@IO9&EN7VQI!
- XM8BYF9"`@("!3=&%N9&%R9"`N9F0@9FEL92P@=&\@9V5N97)A=&4@96<N($%ME
- XM:6=A0D%324,@:6YT97)F86-E"B`@("`@("`@("`@("`@($-O=6QD(&)E('5ST
- XM960@=&\@9V5N97)A=&4@3&%T=&EC92`C<')A9VUA)W,@=&]O+"!)('1H:6YKW
- XM+@H*;V1I;F=L=64N87-M("`@1VQU96-O9&4@=&\@:6YT97)F86-E('=I=&@@@
- XM0R!C;VUP:6QE<G,N"B`@("`@("`@("`@("`@($%S<V5M8FQE<R!/2R!U;F1EN
- XM<B!!>G1E8R`G87,G(&%N9"!!-CA+(#(N-@H@("`@("`@("`@("`@("!!<W-ED
- XM;6)L92!W:71H($$V.$L@9F]R('5S92!W:71H($QA='1I8V4@86YD($)L:6YK/
- XM"@IO9&EN+F@@("`@("`@("!#(&AE861E<B!W:71H(&9U;F-T:6]N('!R;W1OV
- XM='EP97,@9F]R($%Z=&5C(&%N9"!!3E-)('-T=69F"@IO9&EN+FD@("`@("`@.
- XM("!);F-L=61E9FEL92!F;W(@07-S96TO038X2PH*36%K969I;&4@("`@("`@?
- XM1F]R(&=E;F5R871I;F<@=&AE(&5X86UP;&5S('=I=&@@07IT96,@0R`S+C0P&
- XM02!O<B!L871E<@H@("`@("`@("`@("`@("!&;W(@9V5N97)A=&EN9R!A;&P@(
- XM97AA;7!L97,@<V%Y.B!M86ME(&%L;`H**BHJ($Y"+B!T:&4@97AA;7!L97,@-
- XM8F5L;W<@97AP96-T(&]D:6XN;&EB<F%R>2!T;R!B92!I;B!204TZ("HJ*@H*\
- XM;V1I;G1E<W0N8R`@("`@5&5S="!O9B!A;&P@9G5N8W1I;VYS(&EN(&]D:6XNQ
- XM;&EB<F%R>0H*;V1I;F1E;6\Q+F,@("`@4VEM<&QE(&1E;6\*"F1R87<N8R`@<
- XM("`@("`@($AA;F1L97,@;75L=&EP;&4@=VEN9&]W<R!A;F0@=&%S:W,@=7-I@
- XM;F<@;V1I;BYL:6)R87)Y"@IP:&EL;W-O<&AE<G,N8R!4:&4@9&EN:6YG('!H9
- XM:6QO<V]P:&5R<RX*"G1A<VMS+F,@("`@("`@(%5T:6QI='DL(&EN9&5P96YD(
- XM96YT(&]F(&]D:6XN;&EB<F%R>2!T:&%T(&QI<W1S('1A<VMS"@H@("!1=65SA
- XM=&EO;G,L(&)U9R!R97!O<G1S+"!C;VUM96YT<R!E=&,N('-H;W5L9"!B92!E]
- XM+6UA:6QE9"!T;R!M92!A="!T:&4@"F%D9')E<W,@8F5L;W<N($5N:F]Y+@H*"
- XM4%,N($D@=V]U;&0@;&EK92!T;R!K;F]W(&EF('1H:7,@=V]R:W,@8V]R<F5CG
- XM=&QY(&]N('1H92!!,S`P,"P@<V\@<&QE87-E"B`@("!R97!O<G0@:68@>6]UU
- XM(&%R92!S;R!L=6-K>2!T;R!H879E(&]N92X*"@I);G1E<FYE=#H@<&]E0&1A#
- XM:6UI+F%A=2YD:R`@("`@("`\/#PM+2TM+2!.;W1E('1H92!C:&%N9V4A"B`@>
- XM("`@("`@("!P;V5`9&%I;6DN9&L@("`@("`@("`@("AO;&0@861D<F5S<RD*%
- XM555#4#H@("`@("XN+B%U=6YE="%M8W-U;B%S=6YI8R%D:W5U9R%D86EM:2%PT
- XM;V4*"E--86EL.B`@(%!E=&5R(-AR8N9K"B`@("`@("`@($AA<VQE(%)I;F=VR
- XM96H@,3(R"B`@("`@("`@($1++3@R,#`@06%R:'5S($XN"B`@("`@("`@($1EG
- X2;FUA<FL*"B`@+2!0971E<BX*R
- X``
- Xend
- Xsize 3438
- END_OF_FILE
- if test 4849 -ne `wc -c <'readme.uu'`; then
- echo shar: \"'readme.uu'\" unpacked with wrong size!
- fi
- # end of 'readme.uu'
- fi
- if test -f 'tasks.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'tasks.c'\"
- else
- echo shar: Extracting \"'tasks.c'\" \(1477 characters\)
- sed "s/^X//" >'tasks.c' <<'END_OF_FILE'
- X/****************************************************************
- X* tasks.c Version 1.0
- X* Created 25-aug-90
- X* Lists tasks/processes currently running
- X****************************************************************/
- X
- X#include "exec/types.h"
- X#include "exec/execbase.h"
- X#include "stdio.h"
- X
- Xstruct MyMem {
- X char name[80];
- X int pri;
- X ULONG addr;
- X};
- X
- Xstruct MyMem mem[80]; /* holds max 80 tasks */
- X
- Xextern struct ExecBase *SysBase;
- X
- Xvoid main()
- X{
- X struct Task *ptr;
- X int numtasks;
- X UWORD *tmp;
- X ULONG *tmp2;
- X
- X numtasks = 0;
- X
- X printf("Pri\tTask\tName\n");
- X
- X Forbid();
- X ptr = (struct Task *)(SysBase->TaskReady.lh_Head);
- X while(ptr->tc_Node.ln_Succ != NULL) {
- X mem[numtasks].pri = (int)ptr->tc_Node.ln_Pri;
- X mem[numtasks].addr = (ULONG)ptr;
- X
- X if(ptr->tc_Node.ln_Name != NULL) {
- X strcpy(mem[numtasks].name,ptr->tc_Node.ln_Name);
- X } else {
- X strcpy(mem[numtasks].name,"<anonymous>");
- X }
- X numtasks++;
- X ptr = (struct Task *)ptr->tc_Node.ln_Succ;
- X }
- X ptr = (struct Task *)(SysBase->TaskWait.lh_Head);
- X while(ptr->tc_Node.ln_Succ != NULL) {
- X mem[numtasks].pri = (int)ptr->tc_Node.ln_Pri;
- X mem[numtasks].addr = (ULONG)ptr;
- X
- X if(ptr->tc_Node.ln_Name != NULL) {
- X strcpy(mem[numtasks].name,ptr->tc_Node.ln_Name);
- X } else {
- X strcpy(mem[numtasks].name,"<anonymous>");
- X }
- X numtasks++;
- X ptr = (struct Task *)ptr->tc_Node.ln_Succ;
- X }
- X Permit();
- X
- X while(--numtasks >= 0) {
- X printf("%3d",mem[numtasks].pri);
- X printf("\t%6lx\t%s\n",mem[numtasks].addr,mem[numtasks].name);
- X }
- X}
- X
- END_OF_FILE
- if test 1477 -ne `wc -c <'tasks.c'`; then
- echo shar: \"'tasks.c'\" unpacked with wrong size!
- fi
- # end of 'tasks.c'
- fi
- echo shar: End of archive 1 \(of 2\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.
-